gpt4 book ai didi

c - 如何使用换行符退出 scanf 循环。当前无限循环

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:34 24 4
gpt4 key购买 nike

我正在尝试:while(scanf("%c %c %d\n", &a, &b, &c) && (a!='\n')) 退出一旦一行为空,例如:

a b 12
q w 4
g u 80

(exit)

代码:

while(scanf("%c %c %d\n", &a, &b, &c) && (a != '\n'))

最佳答案

要读取,请使用fgets()。然后,如果成功,将输入字符串解析为 '\n',预期为 a、b、c 或任何其他内容。

//                          c  ' '  c  ' '  d   \n  \0
#define LINE_EXPECTED_SIZE (1 + 1 + 1 + 1 + 11 + 1 + 1)

char buf[LINE_EXPECTED_SIZE * 2]; // let us be generous with size.
while (fgets(buf, sizeof buf, stdin) && buf[0] != '\n') {
char a,b;
int c;
if (sscanf(buf, "%c %c %d", &a, &b, &c) != 3) {
// Note unexpected input
fprintf(stderr, "Unexpected bad input '%s'\n", buf);
break;
}
printf("a:'%c', b:'%c', c%d\n", a,b,c);
}

"\n"scan() 格式的末尾很少是正确的。 @Jonathan Leffler .


上面使用 sscanf(...) != 3 来检测是否匹配了 3 个说明符。这不会检测行中是否有额外 文本。一种高级方法使用 "%n" 扫描可选的后续空白,然后记下该点的扫描偏移量。

  // if (sscanf(buf, "%c %c %d", &a, &b, &c) != 3) {
int n = 0;
sscanf(buf, "%c %c %d %n", &a, &b, &c, &n);
if (n == 0 || buf[n] != '\0') {
// if scanning did not reach %n or extra text followed ...

关于c - 如何使用换行符退出 scanf 循环。当前无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52799602/

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