猿问

scanf()将新行char留在缓冲区中

scanf()将新行char留在缓冲区中

我有以下程序:


int main(int argc, char *argv[])

{

  int a, b;

  char c1, c2;

  printf("Enter something: ");

  scanf("%d",&a); // line 1

  printf("Enter other something: ");

  scanf("%d", &b); // line 2


  printf("Enter a char: ");

  scanf("%c",&c1); // line 3

  printf("Enter another char: ");

  scanf("%c", &c2); // line 4


  printf("Done"); // line 5


  system("PAUSE");


  return 0;

}

正如我在C书中读到的那样,作者说scanf()在缓冲区中留下了一个新的行字符,因此,程序不会在第4行停止供用户输入数据,而是将新行字符存储在c2中并移至第5行。


是对的吗?


但是,这只发生在char数据类型中吗?因为我没有int在第1,2,3行中看到数据类型的这个问题。是不是?


慕姐4208626
浏览 615回答 3
3回答

慕莱坞森

使用scanf(" %c", &c2);。这将解决您的问题。

梵蒂冈之花

getchar()在呼叫第二之前使用scanf()。scanf("%c", &c1);getchar();&nbsp; // <== remove newlinescanf("%c", &c2);
随时随地看视频慕课网APP
我要回答