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

时间:2016-06-19 08:45:36

标签: c

我的部分工作是获取用户输入;然后,如果输入不正确,则提示他们再试一次。当我以这种方式使用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;
 }

2 个答案:

答案 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)

代码完成了它所写的内容,所以在你的情况下它代码如下:

  1. 给用户的消息:输入正数
  2. scanf:读取用户的输入
  3. 确定数字是否为正数
    • 如果是 - if 正文将不会被执行 和程序结束
    • 如果不是 - 打印信息,阅读数字并编程结束
  4. 您正在寻找的是循环

    你想做这样的事情:

    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;