gpt4 book ai didi

c - scanf 终止标准输入

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:54 35 4
gpt4 key购买 nike

#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

这并没有给我任何输出。

最佳答案

关于仅使用 scanf() 的最简单修改从 ls -l 命令读取输出是这样的:

#include <stdio.h>

int main(void)
{
char str[20];
int number;
if (scanf("%*[^\n]") != 0)
return 1;
while (2 == scanf("%s %*d %*s %*s %d %*[^\n]", str, &number))
printf("%s %d\n", str, number);
return 0;
}

第一个scanf()读取到但不包括换行符;跳过 ls -l 输出的 total NNN 行。第二个 scanf() 几乎和你的一样,只是它跳过了第二个数字(文件大小)之后的数据直到换行符。幸运的是,开头的 %s 跳过了前导空格,包括换行符,因此扫描设置 %*[^\n] 留下换行符的事实并没有一点都不重要。

我的目录产生:

$ ls -l
total 152
-rw-r--r-- 1 jleffler staff 22072 Dec 30 09:19 LICENSE.md
-rw-r--r-- 1 jleffler staff 2694 Dec 30 09:19 README.md
dr-xr-xr-x 4 jleffler staff 128 Aug 14 2016 Safe
drwxr-xr-x 84 jleffler staff 2688 Jan 12 00:58 Untracked
drwxr-xr-x 26 jleffler staff 832 Dec 25 22:39 bin
-rw-r--r-- 1 jleffler staff 1875 Jan 19 00:08 crseq71.sql
drwxr-xr-x 14 jleffler staff 448 Dec 30 09:19 doc
drwxr-xr-x 10 jleffler staff 320 Jan 12 01:13 etc
-rw-r--r-- 1 jleffler staff 173 Mar 3 2017 get.jl.activity
drwxr-xr-x 21 jleffler staff 672 Jan 7 23:02 inc
drwxr-xr-x 5 jleffler staff 160 May 28 2017 lib
-rw-r--r-- 1 jleffler staff 390 Jun 21 2017 makefile
drwxr-xr-x 4 jleffler staff 128 Jan 12 01:13 packages
-rw-r--r-- 1 jleffler staff 218 Oct 15 10:18 pending.20171015.101828
-rwxr-xr-x 1 jleffler staff 8704 Jan 19 21:39 rl43
-rw-r--r-- 1 jleffler staff 248 Jan 19 21:39 rl43.c
drwxr-xr-x 3 jleffler staff 96 Jan 19 21:21 rl43.dSYM
-rw-r--r-- 1 jleffler staff 2247 Jan 6 22:44 sll43.c
-rw-r--r-- 1 jleffler staff 126 Oct 24 12:52 so-4689-5145.info
drwxr-xr-x 227 jleffler staff 7264 Jan 19 11:34 src
-rw-r--r-- 1 jleffler staff 92 Jan 19 21:20 testfile.txt
-rw-r--r-- 1 jleffler staff 645 Jan 18 23:37 union71.c
$ ls -l | ./rl43
-rw-r--r-- 22072
-rw-r--r-- 2694
dr-xr-xr-x 128
drwxr-xr-x 2688
drwxr-xr-x 832
-rw-r--r-- 1875
drwxr-xr-x 448
drwxr-xr-x 320
-rw-r--r-- 173
drwxr-xr-x 672
drwxr-xr-x 160
-rw-r--r-- 390
drwxr-xr-x 128
-rw-r--r-- 218
-rwxr-xr-x 8704
-rw-r--r-- 248
drwxr-xr-x 96
-rw-r--r-- 2247
-rw-r--r-- 126
drwxr-xr-x 7264
-rw-r--r-- 92
-rw-r--r-- 645
$

关于c - scanf 终止标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48352813/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com