我是 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/