C中扫描字符的问题

时间:2011-02-24 19:35:17

标签: c

#include<stdio.h>
#include<conio.h>
void main()
{
  int a,b,c;
  char ch;
  printf("Enter value of a and b");
  scanf("%d %d",&a,&b);
  printf("Enter choice of operation");
  scanf("%c",&ch);// **Here this statment is not able to receive my input***
  switch(ch)
  {
     case '+':
            c=a+b;
            break;
     case '-':
            c=a-b;
            break;

     default:
             printf("invalid");
             break;
  }
getch();
}

错误:

scanf("%c",&ch); // 此声明无法接收我的输入 无法扫描用户提供的输入??????

感谢..

8 个答案:

答案 0 :(得分:7)

与大多数转化不同,%c在转换字符之前会跳过空格。用户输入两个数字后,输入缓冲区中会有一个回车符/换行符等待读取 - 这就是%c读取的内容。

答案 1 :(得分:4)

它从您之前的数据条目中获取换行符。请考虑使用fgets()sscanf(),而不是直接使用scanf()

答案 2 :(得分:3)

试试吧 scanf(" %c", &ch); 这是因为你的scanf将第二个数字后面的空格视为要插入ch的字符。

答案 3 :(得分:3)

此声明中写%s而不是%c。它肯定会奏效。

scanf("%s",&ch);

答案 4 :(得分:1)

如果您只是阅读一个字符,则可以使用getchar() -

 c = getchar();

答案 5 :(得分:1)

对于单个字符输入,请使用getchar()。

答案 6 :(得分:1)

使用getchar()sscanf()以其他方式安慰。

char ch;

ch = getchar();

这很简单。如果你想使用scanf("%c",&ch);那么, 只需从之前的\n声明中删除printf()

答案 7 :(得分:1)

在这个问题上你可以这样写 scanf(“%c”,&ch);

空格将覆盖您的“ Enter”字符,然后扫描您要输入的内容... https://ide.geeksforgeeks.org/ANGPHrqeAq