c - 从文件读取输入时如何限制scanf

标签 c

我是 C 的初学者,我编写了如下程序:

#include<stdio.h>

int main() {

    char r[10];
    char y[10];
    puts("Printing Data \n");
    while (scanf(" %10s %s",r,y) == 2) {
        printf("%s and %s\n",r,y);
}
    return 0;
}

命令./prog.c <文件.txt

文件.txt

aman dhaker
rudra pratap hensome
nitesh dhakar

虽然我希望 scanf 只读取 2 个字符串,但在 file.txt 的第 2 行有 3 个字符串,但我想跳过第三个 arg,因为我只想打印 2 个字符串,但不知何故我无法跳过特定的字符串。

我当前的输出:

aman dhaker
rudra pratap hensome
nitesh dhakar

我想要的输出:

aman dhaker
rudra pratap
nitesh dhakar

请帮帮我。

我试过包括像 [^] 这样的正则表达式来排除包含空格的结果,但没有成功。

最佳答案

你可以用fgets读取每一行,然后将sscanf应用于读取的字符串,就像这样

#include <stdio.h>

int main(void) {

    char r[10];
    char y[10];
    char input[100];
    while(fgets(input, sizeof input, stdin) != NULL) {
        if(sscanf(input, "%9s%9s", r, y) == 2) {
            printf("%s %s\n", r, y);
        }
    }
    return 0;
}

程序输出:

aman dhaker
rudra pratap
nitesh dhakar

请注意,我将字符串长度限制为 9 以允许使用 NUL 终止符。

使用 fgets 然后使用 sscanf 通常比使用 scanf 更好。它使流控制更容易,并且避免必须清除输入缓冲区 - 如果输入错误,您可以忘记字符串并输入另一个字符串。

关于c - 从文件读取输入时如何限制scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56865630/

相关文章:

C语言在main()内部、main()外部初始化全局变量

c - 将数组映射到结构时的顺序相反

c - 你如何打印出一个 IEEE754 数字(没有 printf)?

c - 为什么 system() 存在?

c - 如何打印大小未知的int数组

c - 为什么 -fno-stack-protector 会颠倒这些字符串的存储顺序?

c - 将结构传递给 xv6 系统调用

c - 为什么在 C 输入中需要变量的内存位置而不是变量本身的名称?

c - 在c中复制字符串时出现段错误

c - main/error :expected ';' , ',' or ')' before numeric constant|中的函数的隐式声明