我正在读一本名为C Programming Language 2nd Edition的书。它教授一个叫做字符计数的程序。但根据输出它没有。它只是取得了角色,什么也没做。 这是第一个版本:
#include <stdio.h>
#include <stdlib.h>
main() {
int c, nl;
nl = 0;
while ((c = getchar()) != EOF)
if (c == '/n')
++nl;
printf("%d\n", nl);
}
因此,当我输入我的句子并按Ctrl+Z
来满足EOF时,它会给我零:
I am a good person
CTRL+Z
0
Press any key to return
它应该计算线条并且是一个我无法理解的初学者。
答案 0 :(得分:3)
虽然直接问题是将'/n'
替换为'\n'
的简单情况(即转义 n
换行符,这是反斜杠的作用) ,您的代码编译和运行的事实是由于C99标准:
6.4.4.4p10:“包含多个字符(例如'ab')的整数字符常量的值,或包含字符或 不映射到单字节执行的转义序列 字符,是实现定义的。“
'/n'
是一个字符数组,由正斜杠和字母n
组成。
一旦你修复了它,你就需要对字符进行更改而不仅仅是换行字符。
答案 1 :(得分:2)
显然,实现应该只计算在if(c=='\n')
条件中实现的换行符数,而不是总字符数。程序会在您的输入上返回0
,因为它不包含换行符。
答案 2 :(得分:0)
可能是程序想要知道下一个字符不是一行('\n'
),所以你需要:
#include <stdio.h>
#include <stdlib.h>
main() {
int c, nl;
nl = 0;
while ((c = getchar()) != EOF)
if (c != '\n')
++nl;
printf("%d\n", nl);
}
这将计算字符的数量,但还有其他转义字符,例如'\t'
,所以我不太确定该程序应该做什么,但我认为在你的书中你会找到更多描述澄清那部分
只需将'/ n'更改为'\ n',就像你现在所知道的那样
答案 3 :(得分:0)
看起来好像你错过了一组{}
括号:
#include <stdio.h>
#include <stdlib.h>
main()
{
int c, nl;
nl = 0;
while((c = getchar()) != EOF)
{ // <- This starts the block to be repeated
if (c == '\n')
{ // <- This is just to keep the code 'safe' ...
++nl;
} // <- ... as is this
} // <- This ends the block to be repeated
printf("The number of New Line characters entered was %d\n", nl);
}