如何在C中提出是或否的问题?
代码应该取用户名并使其成为一个字符串(有效)。然后它继续并询问用户他们是否已准备好开始他们的旅程(这将是一个简单的文本冒险游戏)。
遗憾的是,这不起作用。我不能问一个是/否的问题,因为我不知道怎么做。谷歌搜索和搜索StackOverflow也没有帮助我。
这就是我到目前为止:
#include <stdio.h>
int main()
{
/*This declares the strings*/
char name[20];
char yesno[3];
char choice[1];
/*This tells the user that they should only use Y/N when responding to Yes or No questions.*/
printf("When responding to Yes or No questions use Y/N.\n");
/*This asks the user what their name is and allows the program to use it as a string for the rest of the program*/
printf("Hello! What is your name?\n");
scanf("%s",name);
printf("Hello %s, are you ready for your journey?\n",name);
scanf("%c",choice);
char choice, 'Y';
while (choice != 'N' && choice == 'Y')
{
printf("Okay!Let's continue %s.\n",name);
}
char choice,'N';
while (choice != 'Y' && choice == 'N')
{
printf("Goodbye.\n");
}
return 0;
}
答案 0 :(得分:1)
char[80] choice;
fgets(choice, sizeof(choice), stdin);
if (choice[0] == 'Y' || choice[0] == 'y')
{
printf("Okay!Let's continue %s.\n",name);
}
else
{
printf("Goodbye.\n");
exit(0);
}
答案 1 :(得分:1)
我看到了一些可能的问题:
printf(“Hello%s,你准备好了吗?\ n”,姓名); 的scanf( “%C”,选择);
1)Scanf需要地址来存储扫描输入,&amp;因为你已经指定了数组,所以给出数组名作为参数适用于'name',它有20个字符的空间(记住C使用NULL('\ 0')字符来标记字符串的结尾)。给出数组名称可以生成所需数组开头的addr,但是您将'choice'声明为一个char的数组。它不能保存任何非空字符串,因为终止'\ 0'填充数组。我建议只使用char&amp;给'scanf'它的地址,因此:
char choice;
...
scanf("%c", &choice);
...
if (choice=='Y' [etc.]
如果您只是必须使用数组,请记住'choice'给出第一个元素的地址,因此要测试char,您需要'* choice'或'choice [0]' (他们是一样的)。
所以:... if (*choice == 'y' || *choice == 'Y')...
或:... if (choice[0] ...
BTW the func的'toupper(int c)&amp;当你测试很多字符时,tolower(int c)可以节省输入:c=(char) tolower((int) c); if (c == 'y') ...else if (c == 'z') [etc.]
(你可以在没有演员表的情况下通过)。
- 此外,当有人输入的名称长度超过19个字符时,scanf
会将其存储在name
数组后的内存中,可能会删除其他一些数据。实际上这可能是你的问题。使用scanf("%19s", name)
将解决此问题(您还应确保yesno
获得@最多两个字符。)
[edit:]进一步说明:如果你想循环直到得到有效的输入,你需要做类似的事情:
...
printf("Are you truly ready to embark on your journey (y/n)? ");
scanf("%c", &choice); /* 'choice' defined as char, not vector */
while (!strchr("nNyY", choice)) { /* bad input, reprompt */
printf("Please enter either 'y' or 'n': ");
scanf("%c", &choice);
}
if (choice=='y' || choice=='Y') {
printf("Well met, %s, thou brave soul!\n", name);
/* etc. */
}
else {
printf("Goodbye!\n");
/* etc */
}
我承认我没有测试过这段代码,但这是我开始的地方。希望它有所帮助...
问候,
编
答案 2 :(得分:1)
#include <stdio.h>
#include <string.h>
int letterinput(const char *validchars) {
int ch;
do ch = getchar(); while ((ch != EOF) && !strchr(validchars, ch));
return ch;
}
int main(void) {
int x;
printf("Enter Y/N: ");
fflush(stdout);
x = letterinput("nNyY");
if (x != EOF) {
if ((x == 'y') || (x == 'Y')) {
printf("YES!\n");
} else {
printf("no :(\n");
}
} else {
printf("You didn't answer\n");
}
return 0;
}