gpt4 book ai didi

c - scanf 中的 %[^\n]s 不等待输入并被跳过

转载 作者:太空狗 更新时间:2023-10-29 15:05:21 25 4
gpt4 key购买 nike

在下面代码的循环中,scanf("%[^\n]s",array) 不工作。它不等待输入并被跳过。但是 % 之前的空格解决了这个问题。为什么?

这是错误的程序:

#include <string.h>
#include <stdio.h>

int main()
{
int t;
scanf("%d",&t);
while(t--){
char arr[199];
scanf("%[^\n]s",arr);
printf("%s",arr);
}
return 0;
}

下面是正确的代码:

#include <string.h>
#include <stdio.h>

int main()
{
int t;
scanf("%d",&t);
while(t--){
char arr[199];
scanf(" %[^\n]s",arr);
printf("%s",arr);
}
return 0;
}

为什么它在 % 之前需要一个空格才能按预期工作?

最佳答案

首先,尾随的 s 不是 %[ 格式说明符的一部分,因此将其删除并让我们谈谈 %[^\n].

现在,%[^\n] 告诉 scanf 做的是扫描所有内容,直到换行符 ('\n')或 EOF,以先到者为准,并将其存储在相应的参数中,在本例中为 arr

问题是:如果要读取的第一个字符是 \n%[^\n] 将失败。

等等”,你说。 '我没有单独输入。那么,它为什么会失败?'。真的。你没有。但还记得您在上一行按下的 Enter 吗?事实证明,之前对 scanf 的调用会抓取所有内容,直到 \n\n 留在那里 并返回.因此,在循环的下一次迭代中,scanf 会看到上次调用 scanf 遗留下来的这个 \n 字符,失败并返回0.

至于空格,就是一个空白字符。 scanf 中的空白字符指示它扫描并丢弃所有空白字符,直到第一个非空白字符。因此,它删除了 \n(因为它是一个空白字符)并且 scanf 将等待进一步的输入。

关于c - scanf 中的 %[^\n]s 不等待输入并被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43029178/

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