scanf可选匹配

时间:2012-02-16 19:22:38

标签: c scanf

所以我必须让scanf读入几个用空格分隔的字符串。但是,我事先并不知道我需要读多少个字符串,它可以是1到5之间的任何字符串,但是我似乎无法让scanf在输入后输入后停止尝试读取。我试过做天真的%s %s %s %s %s,但是你可以想象在点击后只需说1或2个单词后它仍然希望阅读更多内容然后我也尝试%s%*[^\n]%s%*[^\n]%s%*[\n]%s%*[\n]%s%*[^\n]以便它会尝试在新的一行字符之后停止,但这也不起作用。

那么什么是让scanf能够拥有一些可选输入部分的最佳方法。

感谢。

编辑:我知道strtok和fgets我只是想看看有没有办法用scanf做到这一点

2 个答案:

答案 0 :(得分:6)

如何使用fgets读取一行,然后使用strotk / sscanf来解析它?然后,您将能够确定用户输入了多少个字符串。

答案 1 :(得分:3)

scanf不强制读取整个格式字符串,一旦输入无效或没有输入就会中止。

来自http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

  

成功时,该函数会成功返回项目数   读。此计数可以匹配预期的读数或更少,   如果匹配失败,则为偶数。

以下代码告诉您在scanf期间读取了多少个参数:

char s1[10], s2[11], s3[11], s4[11], s5[11];
int read = scanf("%10s %10s %10s %10s %10s", s1, s2, s3, s4, s5);
printf("Read %d strings", read);

如果您输入aaa bbb ccc并按Enter键,则会打印3,aaa bbb ccc ddd会打印4,等等。