gpt4 book ai didi

c - 在c中的一行中输入字符和整数从过去的输入流中读取字符

转载 作者:太空宇宙 更新时间:2023-11-04 02:47:31 26 4
gpt4 key购买 nike

我一直不擅长用 C 语言输入字符,这是另一个例子。虽然我了解(也许)发生了什么,但我无法找出解决方案。

我有以下代码

scanf("%ld %ld",&n,&m);

for(i=0;i<n;i++)
scanf("%ld",&array[i]);

for(i=0;i<m;i++)
{
fflush(stdin);
//inputting a character 'R' but it is picking '\n' from past buffer
scanf("%c",&query);

//As a result of above problem, it is also acting wierd for same reason
scanf("%ld",&d);

printf("%c %ld",query,d);
printf("\nI=%ld\n",i);
}

请帮我弄清楚发生这种情况的原因以及解决方案。

最佳答案

scanf%d(或 %ld)一起使用仅从输入流中提取数字;它在流中留下换行符。

因此,当您编写 scanf("%c" 时,它会读取该换行符。

要解决此问题(如果您的意图是 scanf("%c" 读取下一行的第一个字符),您需要刷新上一行的输入。一种方法即:

int ch; while ( (ch == getchar()) != EOF && ch != '\n' ) { }

您的行 fflush(stdin); 会导致未定义的行为 - 不要那样做。 fflush 函数仅用于输出流。

此外,检查 scanf 的返回值也是一个非常好的主意。如果这不是您所期望的,那么您可能希望采取一些行动,而不是假装输入了一个数字。

关于c - 在c中的一行中输入字符和整数从过去的输入流中读取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25709939/

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