gpt4 book ai didi

c - 为什么我的程序跳过 scanf()?

转载 作者:行者123 更新时间:2023-11-30 15:07:51 25 4
gpt4 key购买 nike

我的部分任务是获取用户输入;然后,如果输入不正确,提示他们重试。当我使用if时声明和 while以这种方式循环,它们完全跳过 scanf命令,程序要么无限运行,要么立即终止,跳过第二次用户输入的机会。知道如何解决这个问题吗?

#include <stdio.h>

int main(void)
{
int number;
printf("please insert positive number\n");
scanf(" %d", &number);
// if the user inputs a value that is not a positive integer, it becomes false
// i want the if statement to re-prompt them to input the correct value
if (number <= 0)
{
printf("try again\n");
scanf(" %d", &number);
}
return 0;
}

最佳答案

scanf 返回成功转换和赋值的字段数量;返回值不包括已读取但未分配的字段。返回值 0 表示未分配任何字段。

scanf 函数从标准输入流 stdin 读取数据并将数据写入参数指定的位置。每个参数必须是指向与格式中的类型说明符相对应的类型的变量的指针。

我建议处理错误。它会在现实世界的代码中发生。 (编写简洁而健壮的代码)。

所以我推荐这样的东西:

#include <stdio.h> 

int read_positive_int(int *n){
int retry = 3;
do{
printf("Please enter a positive number:\n");
if (scanf("%d", n) == 1){
if (*n > 0) return 1; //ok
}
} while (--retry);
return 0; //error
}

int main(void)
{
int n;
if (read_positive_int(&n))
printf("n = %d\n", n);
else
printf("error\n");
}

我希望这会有所帮助。

关于c - 为什么我的程序跳过 scanf()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37905434/

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