我正在编写一个程序来读取文本文件的前20行。当读取前20行时,用户可以选择继续读取接下来的20行或退出程序。然而,我发生了什么,它打印了20行,用户提示出现,然后它自动打印接下来的20行,而不等待用户的输入。之后,它将打印用户提示,然后等待输入。我知道这是一个简单的问题,但我没有看到它!到目前为止,根据对我的问题的回复,我对代码进行了一些修改:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
char fname[20];
char c, input;
int line;
line = 0;
printf("Please enter the name of the file you wish to view\n");
scanf("%s", fname);
fp = fopen(fname, "r");
if (fp == NULL)
{
printf("The file did not open correctly");
exit(0);
}
else
{
printf("The file opened correctly\n");
}
while(c != EOF && input != 'q')
{
c = getc(fp);
printf("%c", c);
if (c == '\n')
{
line++;
while (line==20)
{
line = 0;
printf("Press return to view the next 20 lines or press q to quit:");
scanf("%c", &input);
if (input == 'q')
{
return 0;
}
else if (input == '\n')
{
line++;
}
}
}
}
return 0;
}
答案 0 :(得分:5)
line = line++;
后增量,你的线总是0.只使用:
line++;
编辑:好的,所以这不是问题。我运行你的程序,问题是当你输入文件名到第一个scanf时,按Enter键,程序读取它。由于某种原因,在第二个scanf中读取此输入(或换行符)作为输入。只需在第一个之后添加一个虚拟scanf来吸收这个换行符:
printf("Please enter the name of the file you wish to view\n");
scanf("%s", fname);
scanf("%c", &input); // dummy scanf
答案 1 :(得分:1)
最重要的是,学会启用所有警告和调试信息(在linux上,gcc -Wall -g
)和学习如何使用调试器(如{{ Linux上的1}}。
如果没有两者,你真的无法在 C 中学习。
答案 2 :(得分:0)
你应该使用stdin而不是scanf的fgets,你可以指定你需要阅读的字符数量,它更安全。