我是C编程语言的新手,我一直试图在其中制作一个基于文本的小游戏。输入非常简单,因为用户需要输入S
或s
以及N
或n
。
问题是,当我运行程序并将输入提供给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 :(得分: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
的调用可能不会返回(例如,输入换行符)。