我正在编写一个简单的程序,用C中的第一个字母来判断这一天。我在调试时遇到了一些麻烦。感谢所有提前看到并回答问题的人。
#include<stdio.h>
int main(void)
{
//Sunday Monday Tuesday Wednesday Thursday Friday Saturday
char letter;
printf("Input the first letter.\n");
scanf("%c",&letter);
switch(letter)
{
case 's': printf("Please in put the second number:\n");
if(getchar()=='u')
printf("It's Sunday\n");
else if(getchar()=='a')
printf("It's Saturday\n");
else
printf("Input wrong!\n");
break;
case 'm': printf("It's Monday\n");
break;
case 't': printf("Please in put the second number\n");
if(getchar()=='u')
printf("It's Tuesday\n");
else if(getchar()=='h')
printf("It's Thursday\n");
else
printf("Input wrong!\n");
break;
case 'w': printf("It's Wednesday.");
break;
case 'f': printf("It's Friday. ");
break;
default : printf("You input the wrong letter \n");
}
return 0;
}
答案 0 :(得分:5)
让我们看看你代码的一大块:
if(getchar()=='u')
printf("It's Sunday\n");
else if(getchar()=='a')
printf("It's Saturday\n");
else
printf("Input wrong!\n");
break;
以下是该代码的执行方式:
getchar()
将被调用,我们会将其与'u'
进行比较。让我们假设失败了。这意味着我们从输入键盘中消耗了一个字符。getchar()
将再次被称为 ,并与'a'
进行比较!而不是这个,你可能想要这样的东西:
int c = getchar();
if(c == 'u')
printf("It's Sunday\n");
else if(c == 'a')
printf("It's Saturday\n");
else
printf("Input wrong!\n");
break;
现在,您仍然会遇到其他问题,因为在scanf()
之后,输入流中的下一个字符将是'\n'
。
要解决此问题,请对输入的第一个和第二个字符使用scanf(" %c", &letter)
。
答案 1 :(得分:1)
请注意,stdin
已缓存,并包含'\n'
。
printf("Input the first letter.\n");
scanf("%c", &letter);
说用户正在考虑&#34;星期六&#34;。当用户输入 s Enter 时,scanf("%c",...)
将消耗's'
,'\n'
将保留在stdin
。< / p>
当代码到达
时case 's':
printf("Please input the second letter:\n");
if(getchar()=='u')
printf("It's Sunday\n");
getchar()
将返回'\n'
。
相反,读取输入并使用
抛出任何前面的空白区域scanf(" %c",&letter); // Note leading space.
此外,正如其他人所指出的,在尝试区分星期六和星期日时,请勿再次阅读char
。
// Ensure letter has _some_ known value should scanf() reach EOF.
char letter = 0;
printf("Input the first letter.\n");
scanf(" %c", &letter);
switch(letter) {
case 's':
printf("Please input the second letter:\n");
scanf(" %c", &letter);
if (letter == 'u')
printf("It's Sunday\n");
else if (letter == 'a')
printf("It's Saturday\n");
else
printf("Input wrong!\n");
break;
答案 2 :(得分:0)
您正在使用两次getchar()一个case语句。那不是你应该怎么做的。你应该首先使用getchar(),然后将其保存到变量中然后进行比较。这是要走的路。
答案 3 :(得分:-1)
例如,要到星期六,你需要输入s,然后输入summat而不是你的
与Tues和thurs相同
最有可能在终端,他们需要在程序查看之前按Enter键。所以只需读取一个字符串