字符输入后C程序崩溃

时间:2015-07-01 13:54:18

标签: c

我是C编程语言的新手,我一直试图在其中制作一个基于文本的小游戏。输入非常简单,因为用户需要输入Ss以及Nn

问题是,当我运行程序并将输入提供给choice时,程序就会停止工作。

以下是代码:

/*O jogo */
#include <stdio.h>
#include "story.h"

int main() {
  char choice;
  puts(intro);
  scanf("%c", &choice);
  if (choice == 's' || choice == 'S') {
    puts(dialog0);
    puts(dialog1);
    puts(dialog2);
    puts(dialog3);
    puts(dialog4);
    puts(dialog5);
    scanf(" %c", &choice);

    if (choice == 's' || choice == 'S')
      puts(dialog6option1);
    else if (choice == 'n' || choice == 'N') {
      puts(dialog6option2);
      puts(dialog6option2pt2);
    }

    puts(dialog6);
    puts(dialog7);
    puts(dialog8);
    puts(dialog9);
    puts(dialog10);
    scanf(" %c", &choice);

    if (choice == 's' || choice == 'S') {
      puts(dialog10option1);
      puts(dialog10option1pt2);
    } else if (choice == 'n' || choice == 'N') {
      puts(dialog10option2);
      puts(dialog10option2pt2);
    }
  }

  return 0;
}

3 个答案:

答案 0 :(得分:1)

我编译的程序没有&#34;停止工作&#34; (我填写了缺失的字符串)。当我在第一次回复时输入'n'时,它就会退出,因为,总而言之,就是这样。

int main() {
    char choice;
    puts(intro);
    scanf("%c", &choice);
    if (choice == 's' || choice == 'S') {
        //  ...
    }
    return 0;
}

所以'n'只是退出程序,否则当我从's'开始,然后继续'n''s'时,我会看到打印的对话框。虽然我在上面评论过,但如果没有输入'n''s',应该会发生什么?

顺便说一句,你没有提示帮助用户知道他们应该输入什么,或者为什么。

答案 1 :(得分:0)

您在第一个scanf内遗漏了一个空格:

...
puts(intro);
scanf(" %c", &choice);  /* missing the space in your code*/
...

答案 2 :(得分:0)

scanf的行为很有意思,特别是当您在格式字符串中包含空格时。当我编写更多面向控制台的应用程序并且没有使用像curses这样的东西时,我使用了类似下面的函数来读取输入:

char
get_next_input(void)
{
        int ch;
        while ((ch=getchar()) != EOF) {
                if (!isspace(ch)) {
                        return (char)ch;
                }
        }
        return (char)'\0';
}

它返回流中的下一个非空白字符或EOF上的'\0'。我发现它比在各种实现中使用scanf更可靠。

您可能遇到的问题是stdin上的线路缓冲。在您按Enter键之前,对scanf的调用可能不会返回(例如,输入换行符)。