首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C程序。切换大小写/用户输入。default将继续执行

C程序。切换大小写/用户输入。default将继续执行
EN

Stack Overflow用户
提问于 2017-08-27 15:57:26
回答 4查看 843关注 0票数 3

每次我输入正确的字符输入时,都会执行默认语句。我遗漏了什么?

我的输出:

正确的输出:

代码语言:javascript
运行
复制
#include <stdio.h>

void main() {
    char ch = '?'; 
    float f;
    double a = 10.00, b = 20.00;
    int i;
    for (i = 0; i < 10; i++) { 
        scanf("%c", &ch);

        switch (ch) {
          case '+': 
            f = a + b; 
            printf("f = %.0f\n", f);
            break;

          case '-': 
            f = a - b; 
            printf("f = %.0f\n", f);
            break;

          case '*': 
            f = a * b; 
            printf("f = %.0f\n", f);
            break;

          case '/': 
            f = a / b; 
            printf("f = %.2f\n", f);
            break;

          default:
            printf("invalid operator\n");
       }
    }
    return 0;
}
EN

回答 4

Stack Overflow用户

发布于 2017-08-27 16:12:10

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

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

在您的示例中,您必须跳过前导空格,才能完成此更改

代码语言:javascript
运行
复制
scanf("%c", &ch);

代码语言:javascript
运行
复制
scanf(" %c", &ch);
       ^              Note the space
票数 5
EN

Stack Overflow用户

发布于 2017-08-27 16:01:31

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

为了进行演示,如果输入"a enter“,则输入流如下所示

代码语言:javascript
运行
复制
a\n

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

代码语言:javascript
运行
复制
abcd\n

循环的第一次迭代将读取您输入的字符,下一次迭代将读取换行符(这不是case中的字符,因此将命中default语句。

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

票数 2
EN

Stack Overflow用户

发布于 2017-08-27 16:10:52

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45902850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档