我的部分工作是获取用户输入;然后,如果输入不正确,则提示他们再试一次。当我以这种方式使用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;
}
答案 0 :(得分:1)
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");
}
我希望这会有所帮助。
答案 1 :(得分:0)
代码完成了它所写的内容,所以在你的情况下它代码如下:
您正在寻找的是循环
你想做这样的事情:
while the entered number is not positive, ask the user to enter the number again
用于
的循环int number;
printf("please insert positive number\n");
scanf("%d", &number);
while (number <= 0) {
printf("try again\n");
scanf("%d", &number);
}
return 0;