在此代码中,需要计算操作符出现的次数。 它不会计算,并且在运行代码时会打印两次“请输入注释。请按Q:”,我不知道怎么了。
#include <stdio.h>
int main(void)
{
char note;
int result1 = 0, result2 = 0, result3 = 0, result4 = 0;
do
{
printf("Please enter a note. to finish press Q:\n");
scanf("%c", ¬e);
switch (note)
{
case'+':
result1 = result1 + 1;
break;
case'-':
result2 = result2 + 1;
break;
case'*':
result3 = result3 + 1;
break;
case'/':
result4 = result4 + 1;
break;
}
} while (note != 'Q');
printf("+ appears %d times\n", result1);
printf("- appears %d times\n", result2);
printf("* appears %d times\n", result3);
printf("/ appears %d times\n", result4);
system("pause");
}
答案 0 :(得分:0)
要调试,请插入
printf("note='%c'\n", note);
在扫描后立即。 您会立即发现问题。
答案 1 :(得分:0)
使用scanf("%c", %c)
,您将一次读取一个字符。没关系,但是..
scanf
不会“重新扫描”输入,直到清除缓冲区。
因此,如果用户输入的字符长于1个字符,则循环将对字符串长+ 1(\n
被视为字符)的每个字符进行迭代。
示例(请注意,它会循环3次+,+,\n
):
Please enter a note. to finish press Q:
++
Please enter a note. to finish press Q:
Please enter a note. to finish press Q:
Please enter a note. to finish press Q:
这就是窍门。您需要更改代码以适应此情况(即,隐藏请输入消息直到为空,或者读取一个字符数组note[128]... scanf('%s', note)
与单个字符以及带有子循环以遍历输入的迭代,等等)。