繁体   English   中英

如何使用scanf读取带有空格的文件的每一行?

[英]How to use scanf to read each line of a file with space?

所以我正在尝试编写 ac 程序,该程序可以读取通过命令行传递给它的文件的每一行并打印出每一行。 我的代码如下所示:

#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 < num.txt

num.txt 包括以下几行:

01 0111111119
111122222228
123400000000
1234kk444k44
oooo11111111
o dk39754i2oo
002711111116
124145245 246623
0027111111167
888888888888
100900000011

我期望打印的是 num.txt 中的每一行,但是当我输入命令时只打印第一行,即 01 0111111119。我该如何解决这个问题????

您的问题的答案不是如何使用scanf()来解决您的问题,而是使用fgets()来代替。 scanf()已知容易出错,可能导致缓冲区溢出等。 fgets()是设计用于处理每一行的函数:

while (fgets(num, sizeof num, fp) != NULL)
{
    printf("%s", num);
}

fpnum.txtFILE *指针。

您可以使用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();
}
}

您的 scanf 将换行符留在行尾,因此下一个 scanf 将失败。 添加 getchar() 以读取并丢弃换行符。

但是,正如其他人所说,请改用 fgets。

如果你想从文件中读取,那么最好使用文件操作。 你可以参考这个http://www.thegeekstuff.com/2012/07/c-file-handling/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM