所以我试着编写一个可以读取文件每一行的c程序通过命令行传递给它并打印出每一行。我的代码看起来像这样:
#include <stdio.h>
#include <stdlib.h>
int main(void){
char num[20];
for (;;){
if((scanf("%[^\n]s", num)) != 1){
break;
}
printf("%s\n", num);
}
}
unix命令行是:./ printeachline&lt; num.txt
num.txt包含以下这些行:
01 0111111119 111122222228 123400000000 1234kk444k44 oooo11111111 o dk39754i2oo 002711111116 124145245 246623 0027111111167 888888888888 100900000011
我打算打印出来的是num.txt中的每一行,但是当我输入命令时,只打印第一行,即01 0111111119.我怎么能解决这个????
答案 0 :(得分:7)
您的问题的答案不是如何使用scanf()
来解决您的问题,而是使用fgets()
。已知scanf()
容易出错,可能导致缓冲区溢出等。fgets()
是设计用于处理每一行的函数:
while (fgets(num, sizeof num, fp) != NULL)
{
printf("%s", num);
}
fp
是FILE *
的{{1}}指针。
答案 1 :(得分:1)
您可以使用fgets()
或者如果您使用的是GNU C,那么您可以使用getline()
逐行读取输入。或者您可以在程序中添加getchar()
循环,然后程序就可以运行。它会读取scanf()
留下的换行符。
#include <stdio.h>
#include <stdlib.h>
int main(void){
char num[20];
for (;;){
if((scanf("%[^\n]s", num)) != 1){
break;
}
printf("%s\n", num);
getchar();
}
}
答案 2 :(得分:0)
您的scanf在行尾离开换行符,因此下一个scanf将失败。添加一个getchar()来读取并丢弃换行符。
但是,正如其他人所说,请改用fgets。
答案 3 :(得分:0)
如果您想从文件中读取,那么最好使用文件操作。您可以参考此http://www.thegeekstuff.com/2012/07/c-file-handling/