以下是代码:
#include <stdio.h>
int main(void) {
int nextChar;
int numLines = 0;
while ((nextChar = getchar())!= EOF) {
if (nextChar == '\n') {
++numLines;
}
}
printf("The\nsky\nis\nblue\n");
printf("%d lines read.\n", numLines);
return 0;
}
它运行,但返回0行读取。我试过把“天空是蓝色的”&#39;文本在一堆不同的地方,但似乎没有任何作用。
代码显示在书中,但没有
printf("The\nsky\is\blue.\n");
但输出显示为:
The
sky
is
blue.
4 lines read.
任何建议??
答案 0 :(得分:2)
您的程序正在寻找EOF
来自while
循环。要输入EOF,请使用:
^Z (Ctrl + Z) in Windows
^D on Unix-like systems
CTRL + D适用于Ubuntu。我在我的机器上运行了你的代码。要获得所需的输出,您需要输入 -
The (Press Enter)
Sky (Press Enter)
is (Press Enter)
Blue (Press Enter)
(and finally send EOF)
按ENTER
会将'\ n'字符发送到Ubuntu上的程序。 Windows使用\ r \ n表示按下了回车键,而Linux和Unix使用\ n表示按下了回车键。
答案 1 :(得分:0)
好吧,我想我知道你要做什么了。首先,您必须确定如何获得输入。我现在假设您想从命令行获取它。当你使用getChar()时,它计算1个字符加上新行,所以你实际上只计算你输入的字符数。当你从控制台得到一行时,它计数\作为一个字符,n作为另一个字符。您可以做的是手动检测字符串中的转义字符,因为您似乎有兴趣检测序列&#34; \ n&#34;。每当你点击Enter并从控制台返回该行,你实际上会得到&#39; \ n&#39;最后的字符与&#34; \ n&#34;不同,如果您愿意,可以单独计算。这是一个例子来说明:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char* currentChar;
char* nextChar;
int numLines = 0;
int bufferSize = 100;
char *input;
int inputLength;
input = (char *) malloc(bufferSize);
inputLength = getline(&input, &bufferSize, stdin);
for (int i = 0; i < inputLength; i++) {
currentChar = input[i];
if (currentChar == '\\' && i < inputLength - 1) {
nextChar = input[i + 1];
if (nextChar == 'n')
numLines++;
}
}
printf("%d lines read.\n", numLines);
return 0;
}