使用goto控制语句循环,但它跳过一个命令

时间:2017-04-23 11:53:02

标签: c scanf

我刚学会了C编程。现在,我正在尝试执行循环 使用 goto 控制语句,但我刚遇到问题 使用变量 char

#include <stdio.h>

char score;
int main(){
    loop:
    printf("Please Input Your Score : ");
    scanf("%c", &score);
    switch(score){
        case 'A' :
          printf("Nilai Anda Baik");
          break;
        default :
          printf("Nilai Anda Salah");
          goto loop;
        }
    return 0;
}

问题是,如果我输入错误的分数,例如&#39; B&#39;,它将打印&#34; Nilai Anda Salah&#34;然后再次自动打印&#34;请输入您的分数:Nilai Anda Salah&#34;一度。之后再次打印&#34;请输入您的分数:&#34;然后我可以再次输入分数。

我不知道为什么它会跳过 scanf 命令。

1 个答案:

答案 0 :(得分:1)

使用以下格式说明符

scanf(" %c", &score);
      ^^^

跳过输入字符之间的换行符。

同样根据C标准函数main,不带参数应声明为

int main( void )

考虑到使用goto语句是个坏主意。此外,无需将变量score声明为全局变量。

程序可以按以下方式查看

#include <stdio.h>

int main(void) 
{
    char score = 'A';

    do
    {
        printf( "Please Input Your Score : " );
        scanf( " %c", &score );

        switch( score )
        {
        case 'A' :
            puts( "Nilai Anda Baik" );
            break;
        default :
            puts( "Nilai Anda Salah" );
            break;
        }
    } while ( score != 'A' );

    return 0;
}