C程序。切换案例/用户输入。默认继续执行

时间:2017-08-27 07:57:26

标签: c switch-statement user-input

每次输入正确的char输入时都会执行默认语句。我错过了什么?

我的输出:

My Outputs

正确的输出:

Correct Outputs

{
    "a": 123,
    "b": "abc"
}

5 个答案:

答案 0 :(得分:5)

scanf()函数在尝试解析字符以外的其他内容之前会自动删除空格。

字符格式(%c%[…]%n)是例外,它们不会删除空格。

在您的情况下,您必须跳过前导白色间距,才能进行更改

scanf("%c", &ch);

scanf(" %c", &ch);
       ^              Note the space

答案 1 :(得分:2)

使用scanf,在您按下某个键后,您需要点击“输入”。这会在输入流中插入两个字符 - 您按下的字符和换行符\n(可能还有\r,回车符。)

为了演示,如果输入“a enter”,则输入流看起来像

a\n

如果输入“a b c d enter”,则输入流如下所示:

abcd\n

循环的第一次迭代将读取您输入的字符,下一次将读取换行符(这不是case中的那个字符,因此点击default语句。< / p>

要读取没有换行符的单个字符,请考虑getchar,或者只考虑另外两个case来捕捉换行符和回车符,并且在任何一种情况下都不执行任何操作(但请记住这将“窃取”你的循环的一些有用的迭代。)

答案 2 :(得分:0)

你必须使用scanf(" %c", &ch);来消除所有空格,当使用%s时你不需要空格。

答案 3 :(得分:0)

scanf("%c", &ch);语句要求您按Enter键。这会在输入流中插入newline \n字符。在迭代期间从输入流中读取\ n字符时,将执行默认的switch-case。

由于只读取一个字符,您可以考虑使用getchar来避免这种情况。或者,您可以在一行中输入字符串,然后输入key,例如:+++---***+或者您可以添加另一个开关案例来处理换行符。

答案 4 :(得分:-2)

更改

scanf("%c", &ch);

ch=getche();

然后它将正常工作,您不必在每次输入后按Enter键。