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

実行時に、コードは gets(str) 行をスキップします。しかし、gets を scanf で置き換えると、機能します。それがうまくいかない特定の理由はありますか?gcc 4.7.2 を使用しています。

4

3 に答える 3

2

上で答えたように、標準入力から文字を読み取るときに、これがgets()あなたのケースで読み取られた標準入力バッファに配置された後にヒットします。gets()が入力を待っていないのはそのためです。

fflush(stdin)文字を読み取った後、入力バッファをクリアするために使用できます。

于 2013-04-30T13:23:25.630 に答える
1

getchar()'\n'標準入力に末尾の改行文字を残します。を呼び出すとgets()、そのような改行文字に遭遇するまで読み取り、それを破棄します。読み取った最初の文字は であるため、'\n'そこですぐに停止します。

解決策は、改行文字を破棄するダミー読み取りを行うことです。

#include <stdio.h>

int main ()
{
  char str[100];
  char letter;

  letter=getchar();
  getchar();

  printf("%c",letter);

  gets(str);
  return 0;
}

は有効な C ではないことに注意してくださいvoid main()(ただし、フリー ランニングの組み込みシステムを開発している場合を除きます。この場合は可能性が低いと思われます)。詳細はこちら

gets()この関数は C 言語の一部ではなくなったことに注意してください。標準の C11 バージョンで削除されました。fgets()代わりに使用してください。

于 2013-04-30T12:47:14.760 に答える