输入使用不起作用,但使用scanf

psy*_*der 2 c gcc stdin input

#include<stdio.h>
void main(){
  char str[100];
  char letter;
  letter=getchar();
  printf("%c",letter);
  gets(str);
  //Rest of code
}
Run Code Online (Sandbox Code Playgroud)

执行时,代码会跳过gets(str)行.但是当我用scanf替换gets时,它可以工作.任何具体的原因,为什么不起作用?我正在使用gcc 4.7.2.

P.P*_*.P. 5

第一次调用getchar()会在输入缓冲区中留下换行符.下一个调用gets()将换行视为输入结束,因此不会等待您输入.

使用另一个getchar()来使用换行符.

 ...
 letter=getchar();
 getchar(); // To consume a newline char left
 printf("%c",letter);
 fgets(str, sizeof str, stdin);
Run Code Online (Sandbox Code Playgroud)

注意: gets()因为它容易受到缓冲区溢出的危险.所以请改用fgets().