我这里有一个代码,它有一个任务来查看用户输入是字符串还是1-49范围内的整数。如果输入“asdas”,则表示无效;如果输入“1-49”中的整数,则表示有效。我遇到的问题是如果我输入“2 asda”
它将被认为是有效的,同时也是无效的,如果我输入“2 2”,它也会认为是有效的。刚刚发现它也接受“2d”作为有效的输入。

for (i = 0; i < 6; i++)
        {

            printf("\nPlease enter the %d winning ticket numbers!: ", i+1);
            if (scanf("%d", (&winningNumbers[i])) == 0 || (winningNumbers[i] <= 0) || (winningNumbers[i] >= 50))
            {
                    inputFlush();
                    printf("\nInvalid Input. Please re-enter.\n") ;
                    i = i - 1;
            }
       }

        for (i = 0; i < 6; i++)
        {
            printf("%d, ", winningNumbers[i]);
        }

最佳答案

将整行读入字符串(fgets,代码段中的第2行)。使用sscanf从字符串中读取数据:在空格后读取整数和一个以上字符。检查sscanf是否返回与1不同的内容。如果是,那么要么在开头有字符串(它返回0,因为它不能读取整数),要么在结尾有额外的空白字符(即它也匹配%c格式说明符)。需要空格来跳过空白直到行的末尾(包括存储的\n)。

printf("\nPlease enter the %d winning ticket numbers!: ", i+1);
fgets(buffer, size, stdin);
if (sscanf(buffer, "%d %c", &winningNumbers[i], &c) != 1 || (winningNumbers[i] <= 0) || winningNumbers[i] >= 50))
{
    // inputFlush(); not needed now that you read the entire line
    printf("\nInvalid Input. Please re-enter.\n") ;
    i = i - 1;
}

08-27 20:37
查看更多