1

私のタイトルが言うように、私はCを学ぶ新しいプログラマーです。これは私の2日目のプログラミングであり、コードでこの問題を修正するための支援が必要です。私は狂ったlibを作成していますが、エラーは発生しませんが、最初のscanfは、他のすべてのscanfが使用する1行ではなく、2行かかります。

コードは次のとおりです。

#include <stdio.h>

int main()
{
    char verb[20];
    char loc[20];
    char noun1[20];
    char noun2[20];
    char adj[20];

/* The following is the part where you input words. It sets them as strings (named word1-5, as stated above)*/

    printf("Welcome to Mad Libs! \nAnswers can only be one word long. \nPlease enter a verb.\n");
    scanf("%s\n",verb);

    printf("Now enter a location!\n");
    scanf("%s\n",loc);

    printf("Now enter a noun!\n");
    scanf("%s\n",noun1);

    printf("Now enter another noun!\n");
    scanf("%s\n",noun2);

    printf("Now please enter an adjective!\n");
    scanf("%s\n",adj);

/* It all comes together here. The code is supposed to take the strings set previously and put them into this story. */
/* The dashes and various /n's are there to make the final Mad Lib easier to read */    

    printf("\n\nHere is your Mad Lib:\n------------------------------ \nHolly %s down to the %s.\nOnce she got there she bought some %s and ate it!\nAfterwards, Holly brought it home and let her %s eat it.\nHolly is a %s girl!\n------------------------------ \n",verb,loc,noun1,noun2,adj);
return 0;
}

これは、UbuntuでViとSublimeText2を組み合わせて作成されました。

私が言ったように、コンパイル時にエラーは発生せず、すべてが正常に行われているようです。問題は、ターミナルで実行すると、最初の回答を入力する必要があることです(「MadLibsへようこそ!回答はできます」 1語だけにしてください。動詞を入力してください。」)2回使用すると、両方が必要になります。

私が何を意味するのか混乱している場合は、自分で実行してみてください(OS XとLinuxの両方で.cファイルとして機能するはずです)。正直なところ、エラーをうまく説明する方法がわかりません。最初の答えを2回入力するようになり、最後のmadlibを表示するときに問題が発生します。

4

1 に答える 1

2

scanf("%s", ...)ではなく、を使用してくださいscanf("%s\n")。は\n後でまでそこに到達しません。(ああ、これはバッファオーバーフローを取得するための良い方法でもあるので、などを使用することを検討してくださいfgets。)

現在の動作方法は次のとおりです。

  1. 行を入力して。を押しEnterます。scanf回線を取得しますが、がないため\n、まだ待機中です。
  2. 次の行を入力して、を押しEnterます。scanfこれ\nで、前の行の終わりにがあり、その文字列を使用します。最初の行が読み取られ、2番目の行がバッファにあり、すでに存在するscanf別の行を待機しています。\n
  3. GOTO 2

そして、それはすべての答えを1つシフトする効果があります。

于 2013-01-18T02:54:52.403 に答える