簡體   English   中英

do/while 循環的問題問了太多次

[英]Issues with do/while loop ask question too many times

我的代碼有問題:
當我寫任何不同於 1,2,3,4 的輸入時,output 是

Inserire il numero dei giocatori 
inserire un numero valido
Inserire il numero dei giocatori 
inserire un numero valido
Inserire il numero dei giocatori 

我該如何解決?


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

int controll_num(){

    int controll=0;
    int players;
    char c;
    do{
        printf("Inserire il numero dei giocatori \n");
        c=getc(stdin);

        switch (c){

            case 49:
                players=1;
                controll=1;
                break;

            case 50:
                players=2;
                controll=1;
                break;

            case 51:
                players = 3;
                controll=1;
                break;

            case 52:
                players = 4;
                controll=1;
                break;

            default:
                printf("inserire un numero valido\n");
        }
    }while(controll==0);
    return players;
}

int main(){

    controll_num();

    return 0;
}

例如使用scanf而不是getc

scanf( " %c", &c );

注意格式字符串中的前導空格。 它允許跳過空白字符,例如通過按 Enter 鍵放置在輸入緩沖區中的換行符'\n'

至於getc那么它可以讀取空白字符。

也不要使用像49這樣的幻數作為案例標簽

case 49:

使用像這樣的字符

case '1':

這將使您的代碼更具可讀性。

您需要檢查該值是否為數字並且根本不需要您的開關盒。

int controll_num(void){

    int players;
    char c;
    while(1)
    {
        printf("Inserire il numero dei giocatori \n");
        c=getc(stdin);

        if(isdigit((unsigned char)c)) 
        {
            players = c - '0';
            break;
        }
        printf("inserire un numero valido\n");

    };
    return players;
}

int main(void)
{
    printf("Number of players %d\n", controll_num());
}

https://godbolt.org/z/sf7nxE7cx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM