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

标签 c printf scanf

所以我正在尝试编写一个 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 < 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 * 指针。

关于c - 如何使用scanf读取带空格的文件的每一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22704814/

相关文章:

c - 使用 malloc 为 C 指针赋值,无需变量初始化

c - 使用 strtok() 和 strcmp() 出现段错误

c - 移动主窗口位置或弹出消息框后列表框控件未重绘

c++ - 深度复制链表 - O(n)

c - 如何调用仅根据参数打印出语句的 C 函数

c++ - sprintf 和 snprintf 无法封装 double

c - 程序的不同行为

c - 删除 ascii float 中的小数点而不截断或精度损失

c - 使用 sscanf() 函数读取字符串

c - 如何在 C 中清空标准输入/输出缓冲区