【发布时间】:2018-01-20 05:07:55
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int main(){
char str[20];
int number;
while(2 == scanf("%s %*d %*s %*s %d %*d %*s %*s %*s", str, &number)){
printf("%s\n",str);
printf("%d\n", number);
}
}
我正在尝试从标准输入中读取多行,所有这些行都具有相同的格式。我当前的实现工作,但我似乎无法弄清楚一旦用户没有输入一行然后按回车键就终止输入。程序一直期待用户的输入。无论如何使用scanf 和我当前的实现来做到这一点?
注意:我正在运行以下命令:
ls -l | my_program
这并没有给我任何输出。
【问题讨论】:
-
输入是什么?
-
您应该通过在类 Unix 系统上输入 Control-D 或在 Windows 系统上输入 Control-Z 来指示 EOF。
%s将跳过前导空格,包括换行符,等待非空白字符。只有 EOF 会让它停止。如果要进行基于行的输入并在空行或全空行上停止,请使用fgets()读取该行并使用sscanf()对其进行解析。请注意,在 Unix 上,Control-Z 暂停而不是终止进程。 -
例如 -ab--c-- 7 是 否 1578
-
我只需要提取-ab--c--和1578
-
欢迎来到 Stack Overflow。请(重新)阅读How to Ask 页面,并注意创建 MCVE (minimal reproducible example) 的指南。发现您正在运行
ls -l | ./your_program应该不难;这应该是最初问题的一部分。一旦获得重要信息,问题就可以立即解决。重要的是要预先说明“必须使用scanf()并且不能使用其他输入功能”之类的限制。人们会建议最好的做事方式,除非他们被告知你没有任何选择使用它。下次请记住。