gpt4 book ai didi

c - scanf ("%[^\n]s",a) 设置字符串大小

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

所以我有一个我使用的代码scanf("%[^\n]s",a);并且有多个 scanf 来接受不同的输入,有些是字符串输入。所以我知道 scanf("%[^\n]s",a) 在到达新行之前接受输入,但是我想知道假设我的字符串最多只能容纳 10 个字符,然后在我的字符串被填充后,但是还没有达到新的行我怎么能在去新行之前摆脱额外的输入。我正在考虑执行 getchar() 直到到达新行,但是为了检查我的 10 个位置是否已填满我需要使用 getchar,所以这不会弄乱我的下一个 scanf 输入吗?有人有其他办法吗?还在使用 scanf() 和 getchar 吗?

最佳答案

scanf("%[^\n]s",a) 是一个常见的错误; %[ 指令与 %s 指令不同。您从 scanf 询问的是:

  • 一组非'\n'字符,后跟...
  • 文字 s 字符。

也许您打算编写 scanf("%[^\n]",a)?注意删除的 s...

您可以使用 * 修饰符来抑制指令的赋值,例如 scanf("%10[^\n]", a); 后跟 scanf("%*[^\n]"); 读取并丢弃下一个换行符和 getchar(); 读取并丢弃该换行符:

scanf("%10[^\n]", a);
scanf("%*[^\n]"); // read and discard up to the next newline
getchar(); // read and discard that newline

正如所指出的,可以连接两个格式字符串以减少对 scanf 的调用次数。为了记录,我这样写了我的答案,我会保持原样。此外,我认为优化尝试可以忽略不计;分析器可能会指出实际场景中优化的更重要的瓶颈。

关于c - scanf ("%[^\n]s",a) 设置字符串大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42264594/

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