gpt4 book ai didi

控制台无法接受输入

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

我正在尝试执行一个 c 程序,在该程序中,如果我向整数变量输入浮点值,它会按预期跳过小数部分,但之后它不会从控制台读取值。在下面的代码片段中,它会跳过该 scanf 行,如果我们输入任何浮点值。我找不到原因。请帮助。

#include <stdio.h>
#include <stdlib.h>

#define SIZE 50

void push(int i);
int pop(void);

int *tos, *p1, stack[SIZE];

int main(void)
{
int value;
tos = stack; /* tos points to the top of stack */
p1 = stack; /* initialize p1 */

do
{
printf("\n Enter value: \n");
scanf("%d", &value);
printf("\n value entered is %d",value);

if(value!=0)
push(value);

else
printf("value on top is %d\n", pop());

} while(value!=-1);

return 0;
}


void push(int i)
{
p1++;

if(p1==(tos+SIZE))
{
printf("Stack Overflow.\n");
exit(1);
}
*p1 = i;
}


int pop(void)
{
if(p1==tos)
{
printf("Stack Underflow.\n");
exit(1);
}
p1--;

return *(p1+1);
}

当从控制台输入一个浮点值时,它会忽略小数部分,然后 do while 继续执行,但它的 scanf 语句不起作用,所以执行它直到堆栈填满,然后退出。请帮忙找出为什么 scanf在这里不起作用?

最佳答案

您要求 scanf 读取一个整数值。如果您随后输入例如一个浮点值,然后 scanf 将读取第一个数字并在“点”处停止。然后下次您尝试读取输入时,它会看到“点”,但不会读取任何内容。

您应该检查 scanf 的返回值,它返回成功读取和转换的项目数,因此对于第一次调用它返回 1 但在所有其他调用它返回 0

您可以通过将整行读入缓冲区(使用 fgets)来解决这个问题,并使用例如sscanf 在缓冲区上。但是您仍然应该检查返回值以了解用户是否输入了有效整数。

关于控制台无法接受输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18503245/

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