当有人输入大字母或小字母时,我如何打印无效,因为据说他们只输入0到10之间的浮点数。
我试着这样编码
出了这么大的问题。

#include<stdio.h>


int main()
{
    int trial=0;
    float judge1=0,judge2,judge3,judge4,judge5;
    char a;

    printf("\n%90s","Welcome to the constentant score calculator program :)");

    printf("\n\n\n\n\n\rKindly enter the constentant score by 5 respected
 judges:");

    do
    {
        printf("\n\nScore by JUDGE 1 (0-10):\t");
        scanf("%f",&judge1);

         if ((judge1>-1)&& (judge1<11) )
             printf("The constentant got %.2f from the judge",judge1);
         else
            printf("\aPlease input a valid score between 0 and 10:");
     } while ((judge1<0) || (judge1>10)||(judge1=a>96) && (judge1=a<123)||
 (judge1=a<91) && (judge1=a>64));
}

好吧这是我的第二个密码
#include<stdio.h>

int main()
{
    float judge1;

    printf("\n%90s","Welcome to the constentant score calculator program :)");

    printf("\n\n\n\n\n\rKindly enter the constentant score by 5 respected
judges:");

    printf("\n\nScore by JUDGE 1 (0-10):\t");
    scanf("%f",&judge1);

    if ((judge1>-1) && (judge1<11))
      printf("The constentant got %.2f from the judge",judge1);
    else
        printf("\aPlease input a valid score between 0 and 10:");
    }
}

最佳答案

当使用"%f"作为scanf的格式字符串时,它将只读取对浮点类型有效的字符,如果检测到任何其他字符,它将停止读取。因此,如果有人键入“abc”,则不会向judge1写入任何内容,这些字符将留在输入缓冲区中以便再次读取。然后,你将陷入一个无限循环,阅读这些相同的字符。
而且,这个表达也没有意义:

judge1=a>96

>的优先级高于==,因此它相当于:
judge1=(a>96)

假设给a赋值,a>96将该值与96进行比较,计算结果为0或1。然后将此值分配给judge1,覆盖从用户读取的内容。假设你打算使用==这个也没有意义。在这种情况下,根据judge1==0的结果来评估judge1==1a>96。因此,只有当judge1为1且a大于96或judge1为0且a小于或等于96时,上述表达式才为真。
另一个问题是a从未被赋值。你似乎觉得当你调用scanf("%f",&judge1);时,读到的第一个字符被写入a。没有导致这种情况发生的链接,因此a保持未初始化状态。
相反,您要做的是使用fgets在一行文本中读取,然后使用strtof读取floatstrtof函数接受指针的地址作为第二个参数,让您知道字符串中解析停止的位置。因此,如果这个指针没有指向字符串末尾的空终止符(或者指向换行符,因为fgets读取并存储换行符),那么您就知道您读取了一个非浮点字符。
float judge1;
char line[100];
char *p;
int invalid_input;

do {
    invalid_input = 0;
    fgets(line, sizeof(line), stdin);
    errno = 0;
    judge1 = strtof(line, &p);
    if (errno || ((*p != 0) && (*p != '\n')) || (judge1 < 0) || (judge1 > 10)) {
        printf("Please input a valid score between 0 and 10:");
        invalid_input = 1;
    } else {
        printf("The constentant got %.2f from the judge\n ",judge1);
    }
} while (invalid_input);

关于c - 如何打印无效的字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53946669/

10-11 21:30