使用C并尝试创建一个疯狂的lib。

时间:2013-01-18 02:51:26

标签: c

正如我的标题所说我是一名新的程序员学习C.这是我的第二天编程,我需要帮助解决我的代码中的这个问题。我正在制作一个疯狂的lib,虽然没有出现错误,但第一次扫描需要2行,而不是每隔一次扫描使用1次。

以下是代码:

#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和Sublime Text 2的组合制作的。

就像我说的那样,编译时我没有收到任何错误,一切似乎都井然有序,问题是一旦我在终端运行它,我必须输入第一个答案(回答“欢迎来到疯狂的自由人” !答案只能是一个单词。请输入一个动词。“)两次,它需要两个。

如果您对我的意思感到困惑,请尝试自己运行它(它应该在OS X和Linux中作为.c文件工作),老实说,我不知道如何很好地描述错误。它让我输入第一个答案两次,并在显示最终的疯狂lib时引起问题。

1 个答案:

答案 0 :(得分:2)

只需使用scanf("%s", ...),而不是scanf("%s\n")\n直到稍后才到达。 (哦,顺便说一下,这也是获取缓冲区溢出的好方法,所以你可以考虑使用fgets等等。)

它现在的工作方式是:

  1. 您键入一行并按 Enter scanf获取该行,但没有\n,所以它仍在等待。
  2. 您键入下一行并按 Enter scanf现在在前一行的末尾有\n并使用该字符串。第一行被读取,第二行现在在缓冲区中,scanf正在等待已经存在的另一行\n
  3. GOTO 2
  4. 这样可以将所有答案都改为一个。