2015-07-01 59 views
-4

我对C编程语言很陌生,我一直试图在其中编写一个基于文本的小游戏。输入非常简单,因为用户需要输入SsNn字符输入后C程序崩溃

问题是,当我运行程序并将输入输入到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; 
} 
+0

第二个scanf在进行之前需要一个空格... – marom

+3

请不要将问题标记为[tag:c]和[tag:C++]。事先选择正确的,除非它是关于两种语言之间的横截面。 – Zeta

+2

什么是对话框? –

回答

0

你错过了空一scanf内:

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

请解释为什么这是必要的,将解决问题? –

+1

这赢得了' t可能会做很多,除非他在输入第一个输入字符之前故意插入空格字符,这是不太可能的,我会说 –

0

尤其是当您在格式字符串空白scanf行为是有趣的。当我写更多的面向控制台的应用程序,并没有使用类似的诅咒,我使用的功能类似以下读取输入:

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

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

您可能遇到的问题是stdin上的行缓冲。拨打scanf可能无法返回,直到您按回车(例如,输入换行符)。

+0

这个'get_next_input()'函数听起来像是一个过于复杂的方法来忽略空白区为什么不插入空格在scanf的格式字符串?我不明白这可能是一个更好的方法。 –

1

我编译的程序没有“停止工作”(我填写了缺失的字符串)。当我在第一个响应中输入'n'时,它只是退出,因为总结起来就是这样。

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

当我开始用's',然后用'n''s'我得到的打印对话框继续这样'n'简单地退出程序,否则。虽然如上所述,当输入'n''s'时应该发生什么?

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