Tag: kernighan and ritchie

使用指针编写strcat()时出错

我正在尝试The C programming Language by K&R学习C The C programming Language by K&R 。 我正在尝试使用指针编写strcat()程序。 char *strcat (char *s, char *t){ char *d; d = s; while(*s++); s–; while(*s++ = *t++); return d; } int main () { char *name1; char *name2; name1 = “stack” ; name2 = “overflow”; printf(“%s %s\n”, name1, name2); printf(“strcat out : […]

例2.1,K&R:LONG_MIN和LONG_MAX的符号常量值是否错误?

这是我用来查找LONG的符号常量值的代码 #include //These header files contains the symbolic constants #include //for different datatypes #include int main(void){ printf(“\tMininum numeric value for long type: %ld\n”, LONG_MIN); printf(“\tMaximum numeric value for long type: %ld\n”, LONG_MAX); printf(“\tMaximum numeric value for unsigned long type: %lu\n”, (unsigned)ULONG_MAX); return 0; } 我得到的输出是: Mininum numeric value for long type: -9223372036854775808 Maximum numeric value […]

将字符转换为整数的微妙之处

有人可以清楚地解释K&R的这些线条实际意味着什么: “ 当char被转换为int时,它是否会产生负整数?答案因机器而异.C的定义保证了机器标准打印字符集中的任何字符都不会是负数 ,而是任意位模式存储在字符变量中的某些机器可能看起来是负面的,但对其他机器则是正面的“。

练习1-18在K&R C编程语言中

这个练习让我发疯。 对不起,如果我的编程问题看起来很小,但我是初学者,所以请耐心等待。 练习要求以下内容:编写程序以从每行输入中删除尾随空白和制表符,并删除完全空行。 任何人都可以告诉我为什么我的代码不起作用? 我还没有解决完全空行的问题,但我找不到任何理由为什么我的代码不会删除尾随空白和标签。 这里是: #include #define MAXLINE 1000 int better_line_length(char line[], int lim); void copy(char to[], char from[]); int main(void) { int len; char s[MAXLINE]; char better_s[MAXLINE]; while ((len = better_line_length(s, MAXLINE)) > 0) { copy(better_s, s); printf(“%s\n”, better_s); } return 0; } int better_line_length(char s[], int lim) { int c, i, last_letter; […]

递归控制流程

#include void printd(int n) { if(n/10) printd(n/10); putchar(n%10+’0′); } 在上面的代码中,将n视为正整数,其值为123。 第一次,123传递给printd(第一次打印)第二次,12传递给printd(第二次打印)第三次,1传递给printd(第三次打印)和putchar打印1 然后在控制流到第二个printd之后,n的值是多少? 由于它是一个自动变量,因此一旦函数结束,它在第三次打印中的值为1,并且在第二次打印时获得值12。 如果是这样,第二次打印将再次导致第三次打印,所以…. 但该程序精美地打印123。 在函数调用期间,我对控制流和变量值的理解出错了吗? 仅供参考,该计划来自K&R 4.10部分的递归

C编程 – K&R示例1.5.2 – 修改后的程序无法按预期运行

我的问题很简单“为什么第10行和第11行的代码无法正常运行?” 我的代码的目的是完全按照原始的K&R代码进行操作,但不计算nc(getchar()==’\ n’)你能请教我吗? 略微修改的K&R代码: /** K&R – 1.5.2 Character Counting **/ #include /* count characters in input; 1st version */ main(){ long nc; nc = 0; while (getchar() != EOF){ if (getchar() != ‘\n’){ ++nc; } } printf(“%ld\n”, nc); } 我使用64位Windows 7,CodeBlocks10.05,GNU GCC编译器。 我目前的进步和理解: 在示例运行中,我键入单词two并按Enter键,等于4个输入,然后按ctrl + Z键输入^Z或EOF字符。 程序然后打印1 。 我期待它打印3 。 我想唯一合乎逻辑的解释是它完全与我的意图相反( 它只计算换行符?)。 事实certificate,如果我输入单词two并按Enter键,则说4次,它打印4 。 […]

K&R练习2-7中的位反转function

C编程语言的练习2-7: 写一个函数invert(x,p,n) ,返回x ,其中n位从位置p开始反转(即1变为0,反之亦然),其他不变。 我理解这样的问题:我有182这是二进制的101(101)10 ,括号中的部分必须反转而不改变其余部分。 返回值应为10101010 ,即十进制为170。 这是我的尝试: #include unsigned int getbits(unsigned int bitfield, int pos, int num); unsigned int invert(unsigned int bitfield, int pos, int num); int main(void) { printf(“%d\n”, invert(182, 4, 3)); return 0; } /* getbits: get num bits from position pos */ unsigned int getbits(unsigned int bitfield, int pos, int […]

来自K&R C的示例中的指针类型不匹配警告

可能重复: 问题编译K&R示例 最近,我一直在通过K&R的C编程语言。 在5.11节中,它们涵盖了函数的指针,并在输入他们的示例之后 – 一个quicksort实现,我们提供了一个指向我们想要使用的比较函数的指针 – 我从编译器收到警告:条件表达式中的指针类型不匹配。 (我的编译器是OS X 10.5.6上的gcc 4.0.1) 触发警告的示例中的行是: qsort((void **) lineptr, 0, nlines-1, (int (*)(void*, void*))(numeric ? numcmp : strcmp)); 程序执行没有segfaulting,但我喜欢每个警告,或至少了解他们的原因。 numcmp的函数声明如下: int numcmp(char *, char *); 但是根据联机帮助页,stcmp有这个签名: int strcmp(const char *s1, const char *s2); 由于方法签名略有不同,警告是否简单? 忽视警告会有什么后果?

getchar()并调整一个循环来打破特定的char

我正在研究臭名昭着的书“Prentice Hall软件系列”并试用他们编写的代码并对其进行修改以了解有关C的更多信息。 我正在控制台上使用Fedora 25上的VIM。 以下代码是本书的引用,我知道“int”缺失以及argc和argv等。 Kernighan和Ritchie – C编程语言:第20页 #include /* copy input to output; 1st version */ main(){ int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); } } 使用此代码,我无法让“EOF”工作。 我不确定“ctr + z”是否真的是真的要做,因为它退出了控制台中的任何控制台程序。 好吧,因为我不确定我改变了条件 … while (c != ‘a’) { … 所以通常如果我输入’a’,while条件应该中断并且programm应该终止。 好吧,当我尝试运行它并输入’a’时它不会。 这里有什么问题? 感谢你们!

帮助K&Rs计数Chars示例

我正在通过K&R的第二版工作,我一直被这个看似简单的例子所困扰: #include main(){ double c; for(c = 0; ((getchar() != EOF) && (getchar() != ‘\n’)); ++c) ; printf(“%.0f\n”,c); } 它根本无法正常工作。 我在(getchar() != ‘\n’)部分添加了当我按下回车时结束程序,但这也没有任何帮助。 这是一些示例输出,使用Mac OSX 10.6开发工具附带的gcc 。 pool-000:Desktop user$ ./a.out a 0 pool-000:Desktop user$ ./a.out asdf 2 pool-000:Desktop user$ ./a.out asfasf 3 所以事情显然是错误的。 我在第18页,如果有帮助的话。 这不是功课,这是为了好玩! 谢谢 :)