我是一个C初学者,试图理解scanf的一些细微差别。这似乎真的很微不足道,但我正在努力以“正确的方式”阅读来自stdin的输入。
当终端输入像string1 string3 string3
和我点击返回,它工作正常,并在结果中给出3.
但是当给予string1
并点击回车键时,我希望程序在result
变量中返回1并中断循环,但这并没有发生,程序只是希望我在终端中输入更多的输入。
#include <stdio.h>
#define nameBufferLen 20
int main () {
int result;
char name[nameBufferLen];
char opens[nameBufferLen];
char closes[nameBufferLen];
while(1) {
result = fscanf(stdin,"%s %s %[^\n]s", name, opens, closes);
printf("%s|%s|%s| AND Result len is : %d\n", name, opens, closes, result);
if (result!=3) {
break;
}
}
return 0;
}
我很想知道是什么方法和正则表达式使我能够用scanf
做到这一点。
1条答案
按热度按时间tkclm6bt1#
下面是@Barmar提到的实现:
和运行示例:
如果输入的字符串长度超过19,多余的字符串将溢出到下一个变量中。您可以使用每个变量的
strlen()
来检测这种情况。或者,您可以使用strpbrk()
来解析字符串s
。