我正在尝试使我的代码...我想识别我是否按下"y"或"n",并根据输入中的哪一个做一些事情。
我以为会这么简单,但不幸的是事实并非如此。
我应该怎么做?
#include <stdio.h>
int main(void)
{
char y;
printf("Single provider (y/n)? ");
scanf(" %c", &y);
if (y == '121' || y == '89')
{
printf("single");
}
else
{
printf("not single");
}
}
你在这里做了一个漂亮的混淆:显然听说过ASCII代码,你想将它们应用到你的代码中。这个想法是好的,而不是实现:
您的代码:
if (y == '121' || y == '89')
正确的代码(没有 ASCII 代码):
if (y == 'y' || y == 'Y')
正确的代码(使用 ASCII 代码):
if (y == 121 || y == 89) // ASCII_Code('Y')=89 and ASCII('y')=121
(请不要删除评论,这对可读性非常有用)
祝你好运
我应该怎么做才能在 C 中提出是或否的问题
有 5 个输入集可以区分:
-
"Yn"
或类似的东西:"yn"
,"Yesn"
,"YESn"
... -
"Nn"
或类似的东西:"nn"
,"non"
,... -
出现文件结尾。
scanf()
返回EOF
,feof(stdin)
是正确的。 -
发生输入错误。
scanf()
返回EOF
,ferror(stdin)
是真的。(罕见) -
别的。 通常是用户错误。
一般来说,最好避免scanf()
并使用fgets()
.
但坚持使用scanf()
:
在输入行中读取。 使用空格使用前导空格,包括前一行的'n'
。
unsigned char buf[80];
buf[0] = 0;
int retval = scanf(" %79[^n]", buf);
然后消除歧义。 建议不区分大小写。也许只允许第一个字母或整个单词。
if (retval == EOF) {
if (feof(stdin) {
puts("End-of-file");
} else { // Input error expected
puts("Input error");
}
} else {
for (unsigned char *s = buf; *s; s++) {
*s = tolower(*s);
}
if (strcmp(buf, "y") == 0 || strcmp(buf, "yes") == 0) {
puts("Yes");
} else if (strcmp(buf, "n") == 0 || strcmp(buf, "no") == 0) {
puts("No");
} else {
puts("Non- yes/no input");
}
}
如何用辅助函数来处理是/否、真/假......?
// Return first character on match
// Return 0 on no match
// Return EOF on end-of-file or input error
int Get1of2(const char *prompt, const char *answer1, const char *answer2) {
if (prompt) {
fputs(prompt, stdout);
}
unsigned char buf[80];
buf[0] = 0;
int retval = scanf(" %79[^n]", buf);
if (retval == EOF) {
return EOF;
}
for (unsigned char *s = buf; *s; s++) {
*s = tolower(*s);
}
if ((buf[0] == answer1[0] && buf[1] == 0) ||
strcmp(buf, answer1) == 0) {
return buf[0];
}
if ((buf[0] == answer2[0] && buf[1] == 0) ||
strcmp(buf, answer2) == 0) {
return buf[0];
}
return 0; // None of the above.
}
示例调用:
int yn = Get1of2("Single provider (y/n)? ", "yes", "no");
int rb = Get1of2("What is your favorite color? (r/b)? ", "red", "blue");
int tf = Get1of2("Nineveh the capital of Assyria? (t/f)? ", "true", "false");
int main(void)
{
int y;
printf("Single provider (y/n)? ");
do
{
y = fgetc(stdin);
}while(y != EOF && y != 'y' && y != 'n');
if(y != EOF)
if (y == 'y')
{
printf("single");
}
else
{
printf("not single");
}
}