繁体   English   中英

用户在 C 语言中输入浮点数或字符时如何打印错误消息?

[英]How do I print out an error message when the user enters a floating number or characters in C language?

我是编程新手。我想创建一个游戏,让用户猜测 0 到 10 之间的数字。但是,当用户输入诸如 7.5 或字符或数字之类的浮点数时,我想打印一条错误消息超出范围,例如 11 或 -5。我该怎么做?

int main()
{
    int answer,randomNumber;
    int correct = 0;
    int tries = 0;
    char again ;
    srand(time(NULL));
    do{
           randomNumber = rand() % 10;
           printf("Guess a number between 0 and 10:\n");
           while(correct ==0){
                while(scanf(" %d",&answer)!=1){
                    printf("Wrong input.\n");
                    scanf(" %d",&answer);
            }
            if(answer<0 || answer>10){
                printf("Invalid input.Enter a number between 0 and 10.\n");
                continue;
            }
            if(answer==randomNumber){
                printf("Congratulations..%d is the correct number.\n",answer);
                tries ++;
                correct = 1;
            }else if(answer > randomNumber){
                printf("Choose a lower number.\n");
                tries++;
            }else if (answer<randomNumber){
                printf("Choose a bigger number.\n");
                tries ++;
            }else{
                printf("Wrong input.Try again..\n");
            }
        }printf("Do you want to play again ? (Y/N):\n");
        scanf(" %c",&again);
        again = toupper(again);
        while(again!='N' && again!='Y'){
            printf("Invalid input.Please type Y or N.\n");
            scanf(" %c",&again);
            again = toupper(again);
        }
    }while(again != 'N');



    return 0;
    }

考虑使用fgets来捕获input
strtol可用于解析input 如果last不指向input末尾的换行符,则存在未处理的字符。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>

int main ( void) {
    char input[100] = "";
    int answer,randomNumber;
    int good = 0;
    int correct = 0;
    int tries = 0;
    char again ;
    srand ( time ( NULL));
    do{
        randomNumber = rand() % 10;
        printf ( "Guess a number between 0 and 10:\n");
        while ( correct == 0) {
            do {
                good = 1;
                char *last = NULL;
                if ( fgets ( input, sizeof input, stdin)) {
                    answer = strtol ( input, &last, 10);
                    if ( '\n' != *last || last == input) {
                        printf ( "Wrong input.\n");
                            good = 0;
                    }
                    else {
                        if ( answer < 0 || answer > 10){
                            printf ( "Invalid input.Enter a number between 0 and 10.\n");
                            good = 0;
                        }
                    }
                }
                else {
                    fprintf ( stderr, "fgets EOF\n");
                    exit ( EXIT_FAILURE);
                }
            } while( ! good);
            if (answer == randomNumber) {
                printf ( "Congratulations..%d is the correct number.\n",answer);
                tries ++;
                correct = 1;
            } else if ( answer > randomNumber) {
                printf ( "Choose a lower number.\n");
                tries++;
            } else if ( answer < randomNumber) {
                printf ( "Choose a bigger number.\n");
                tries ++;
            } else{
                printf ( "Wrong input.Try again..\n");
            }
        }
        correct = 0;
        printf ( "Do you want to play again ? (Y/N):\n");
        do {
            if ( fgets ( input, sizeof input, stdin)) {
            }
            again = toupper ( (unsigned char)input[0]);
            if ( again != 'N' && again != 'Y') {
                printf ( "Invalid input.Please type Y or N.\n");
            }
        } while ( again != 'N' && again != 'Y');
    } while ( again != 'N');

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM