gpt4 book ai didi

c - 如何使用 scanf() 从输入中读取直到找到换行符?

转载 作者:太空狗 更新时间:2023-10-29 16:30:07 28 4
gpt4 key购买 nike

当我应该从输入中读取直到有一个空格然后直到用户按下 enter 时,我被要求用 C 做一个工作。如果我这样做:

scanf("%2000s %2000s", a, b);

它将遵循第一个规则而不是第二个规则。
如果我写:

I am smart

What I get is equivalent to:
a = "I";
b = "am";
But It should be:
a = "I";
b = "am smart";

I already tried:

scanf("%2000s %2000[^\n]\n", a, b);

scanf("%2000s %2000[^\0]\0", a, b);

在第一个中,它等待用户按下 Ctrl+D(发送 EOF),这不是我想要的。在第二个中,它不会编译。根据编译器:

warning: no closing ‘]’ for ‘%[’ format

有什么好的方法可以解决吗?

最佳答案

scanf(和表兄弟)有一个稍微奇怪的特征:格式字符串中(大部分放置在其中)的空白匹配输入中任意数量的空白。碰巧的是,至少在默认的“C”语言环境中,换行符被归类为空白。

这意味着尾随的 '\n' 不仅要匹配 a 换行符,还要匹配任何后续的空格。在您发出输入结束信号或输入一些非空白字符之前,它不会被视为匹配。

处理这个问题的一种方法是这样的:

scanf("%2000s %2000[^\n]%c", a, b, &c);

if (c=='\n')
// we read the whole line
else
// the rest of the line was more than 2000 characters long. `c` contains a
// character from the input, and there's potentially more after that as well.

根据情况,您可能还想检查 scanf 的返回值,它告诉您成功转换的次数。在这种情况下,您会寻找 3 来指示所有转换都已成功。

关于c - 如何使用 scanf() 从输入中读取直到找到换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8097620/

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