0

char変数に文字列を挿入するのに問題があります。機能させると問題が発生します。プログラムをデバッグすると、表示されますprintfがスキップされますgets

これが私のコードです:

int uloz(SPRAVA *p){

    char string[200];

    printf("Your message here: ");
    gets(string);
    printf("You have entered: %s", string);
    getchar();

    return 0;
}
4

2 に答える 2

3

使用するscanf(" %30[^\n]%*c",string);

  1. [^\n]まで何でも受け付け\nます。
  2. 30文字数の長さを最大 30 に制限します。
  3. initialは、すでに stdin ストリームにあるものをspace(' ')すべて消費します。\n(オプション&私はそれを確認していません)
  4. & 最後に、文字列を入力した後に押されたもの%*cを消費します。\n

scanf(" %30[^\n]%*[^\n]%*c",string);入力された残りの文字 (30 文字以降) を破棄するのは良いオプションだと思います。ただし、これは完全に未確認です。考えられるアイデアとして追加しただけです。使用前にテストしてください。:-)

于 2012-12-14T19:05:29.420 に答える
1

stdioバッファに改行があり(前のバッファに残っているscanf)、getsすぐに満足します。

fgetsそれを修正する簡単な方法はありませんが、 :の前に入力を破棄してみることができます。

while((c = getchar()) != '\n' && c != EOF)
    /* discard the character */;

真の解決策は、との混合を避けることscanfですfgets


fgetsの代わりに使用してくださいgets

于 2012-12-14T18:44:09.630 に答える