while循环只接受整数值并退出任何其他输入

时间:2015-09-09 00:31:25

标签: c while-loop

我在C中运行此程序将华氏温度转换为摄氏温度,并且只需要接受用户的整数值。

请告诉我如何修改此内容?

int main() {
    int x;
    double y;
    while(x>0) {
        printf("Enter the temperature in Fahrenheit:");
        scanf("%d", &x);
        y=((x-32)/1.8)
        printf("%f\n",y);
    }
}

2 个答案:

答案 0 :(得分:3)

您的代码无效的原因是有时scanf没有读取任何内容,因此它不会修改x

您知道scanf通过检查其返回值来读取内容。它返回“已扫描”项目的数量。在这种情况下,号码必须为1

scanf返回0时,您应该读取并丢弃缓冲区中的数据。您可以通过提供%*[^\n]格式说明符来实现,这意味着“读取并丢弃最多'\n'个字符的输入。读取int直到成功的完整代码段如下所示:

while (scanf("%d", &x) != 1) {
    printf("Please enter a valid number:");
    scanf("%*[^\n]");
}

注意:不言而喻,您应该在计算;的行上使用缺少的分号y修复语法错误。

答案 1 :(得分:-1)

  • 您可以使用以下代码。

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
     int x;
     double y;
     char str1[5];
    int num1,i;
    bool yes = true;
      while(x>0) 
      {
          printf("Enter the temperature in Fahrenheit:");
          scanf("%s",str1);
          for(i=0;str1[i]!='\0';i++)
          if(!(str1[i]>=48&&str1[i]<=56))
          {
             printf("The value is invalid \n");
             yes = false;
          }
          num1 = atoi(str1);
    
          if(yes == true)
          {
            printf("This Number is %d\n",num1);
            y=((num1-32)/1.8);
            printf("%f\n",y);
           }
       }
    }