首页 > 解决方案 > 如果我的 scanf 变量是浮点数并且用户输入了一个字符,我该如何提示他们输入一个数字?假设 scanf 在 do while 循环内

问题描述

我曾尝试使用 k = getchar() 但它也不起作用;

这是我的代码

#include<stdio.h>
int main()
{
    float height;
    float k=0;
    do 
    {
        printf("please type a value..\n");
        scanf("%f",&height);
        k=height;
    }while(k<0);// i assume letters and non positive numbers are below zero.
    //so i want the loop to continue until one types a +ve float.
    printf("%f",k);



    return 0;
}

我想要一个如果用户输入字母或负数或字符,他/她应该被提示再次输入该值,直到他输入一个正数

标签: cscanf

解决方案


我一般不会使用scanf-family 函数进行阅读stdin

fgets更好,因为它将输入作为您指定长度的字符串,避免缓冲区溢出,您可以稍后将其解析为所需的类型(如果有)。对于float值的情况,strtof有效。

但是,如果您的可交付成果或家庭作业的规范要求使用scanfwith%f作为格式说明符,您可以检查其返回值,该值将包含格式字符串中已成功扫描的格式说明符数量的计数:

§ 7.21.6.2

如果在第一次转换(如果有)完成之前发生输入故障,[scanf] 函数将返回宏 EOF 的值。否则,该函数返回分配的输入项的数量,如果发生早期匹配失败,该数量可能少于提供的数量,甚至为零。

从那里,您可以诊断输入是否有效。此外,当scanf失败时,stdin不会清除,后续调用scanf(即在循环中)将继续查看其中的任何内容。这个问题有一些关于处理这个问题的信息。


推荐阅读