数值和字符混合输入

第8章 复习题

习题8 数值和字符混合输入

  • 在使用缓冲输入的系统中,把数值和字符混合输入会遇到什么潜在的问题?

    用scanf()输入数值时,会将数值后的换行符‘\n’留在缓冲区,而再用getchar()或者fgetc()输入字符时,会将留在缓冲区的‘\n’读取。所以混合输入时,应当在读取字符之前处理删除留下的换行符。

    我的一种代码实现

    #include 
    
    int main()
    {
        int score;
        char grade;
        
        printf("Enter the score.\n");
        scanf("%d",&score);
        printf("Enter the letter grade.\n");
        while(getchar() != '\n')    //处理数值后可能存在的无效输入
            continue;
        grade=getchar();
        printf("%d\n%c\n",score,grade);
        return 0;
    }
    
    
  • 下面这两行代码及其变体在输入验证时也很有用

while(getchar() != '\n')  
      continue;

如:

while(scanf("%ld",&input) != 1)
  {
      while((ch = getchar()) != '\n')
          putchar(ch);        //处理错误输入
      printf(" is not an interger.\nPlease enter an"
                   "integer value, such as 1,-2:");

你可能感兴趣的:(数值和字符混合输入)