C中的scanf()问题

C中的scanf()问题,c,scanf,C,Scanf,我正在自学如何使用C语言编写代码。为了更深入地研究后者,我正在做一些基本练习,因此,今天我在使用scanf()指令时遇到了一个小问题。事实上,以下代码: int main() { char inputOne; char inputTwo; printf("Insert a char: "); scanf("%c", &inputOne); // &inputOne is the pointer to inputOne. printf("Insert

我正在自学如何使用C语言编写代码。为了更深入地研究后者,我正在做一些基本练习,因此,今天我在使用
scanf()
指令时遇到了一个小问题。事实上,以下代码:

int main() {

  char inputOne;
  char inputTwo;

  printf("Insert a char: ");
  scanf("%c", &inputOne);
  // &inputOne is the pointer to inputOne.

  printf("Insert another char: ");
  scanf("%c", &inputTwo);

  if (inputOne == inputTwo) {
    printf("You have inserted the same char!\n");
    printf("Chars inserted: %c, %c\n", inputOne, inputTwo);
  } else {
    printf("You have inserted two different chars!\n");
    printf("Chars inserted: %c, %c\n", inputOne, inputTwo);
  }

}
编译时不会返回任何错误,但在终端上启动应用程序时,无法插入第二个字符。 以下是发生的情况的示例:

Macbook-Pro-di-Rodolfo:~ Rodolfo$ /Users/Rodolfo/Documents/GitHub/Fondamenti\ di\ C/esempio-if-else ; exit;
Insert a char: a
Insert a second char: You have inserted two different chars!
Chars inserted: a, 

logout

[Process completed]

有人能解释一下为什么会发生这种情况吗?

第二个字符的输入是
换行符。您可以再次使用
inputWO
来防止:

int main() {

  char inputOne;
  char inputTwo;

  printf("Insert a char: ");
  scanf("%c", &inputOne);
  // &inputOne is the pointer to inputOne.

  printf("Insert another char: ");
  scanf("%c", &inputTwo);
  scanf("%c", &inputTwo);

  if (inputOne == inputTwo) {
    printf("You have inserted the same char!\n");
    printf("Chars inserted: %c, %c\n", inputOne, inputTwo);
  } else {
    printf("You have inserted two different chars!\n");
    printf("Chars inserted: %c, %c\n", inputOne, inputTwo);
  }

}

此问题数百个重复项中的一个。@user3121023转换规范之前或之后的空格数是否会影响最终结果?换句话说,编译器的
scanf(“%c”,&inputwo)
scanf(“%c”,&inputwo)
相同吗?@user3121023很抱歉,在我的第一条评论中没有正确显示,但我的意思是如果
scanf()
的行为方式与引号和转换规范之间的空格数无关
%
。换句话说,如果
%c
%c
输出相同的内容。