如何使用scanf读取空间文件的每一行?

use*_*521 0 c printf scanf

所以我正在尝试编写一个可以读取文件的每一行的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);
        }
}
Run Code Online (Sandbox Code Playgroud)

unix命令行是:./ printeachline <num.txt

num.txt包含以下行:

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

我打算打印出来的是num.txt中的每一行,但是当我输入命令时只打印第一行,即01 0111111119.我怎么能解决这个问题????

Yu *_*Hao 7

您的问题的答案不是如何使用scanf()来解决您的问题,而是使用fgets().scanf()众所周知,它容易出错,可能导致缓冲区溢出等fgets(),这是设计用于处理每一行的功能:

while (fgets(num, sizeof num, fp) != NULL)
{
    printf("%s", num);
}
Run Code Online (Sandbox Code Playgroud)

fpFILE *指针num.txt.