【问题标题】:If statement is not working with char in C如果语句不适用于 C 中的 char
【发布时间】:2021-12-02 06:48:31
【问题描述】:

如果工作,我一直在努力做到这一点 谁能弄清楚为什么不呢? 谢谢

float number1;
float number2;
float total;
char operator[1];
printf("Welcome to the calculator\n");
while(3>2)
{
    printf("Pick a number\n");
    scanf("%f", &number1);
    
    printf("Que quieres hacer?\n");
    scanf(" %c", &operator);
    printf("You wrote %s\n", operator);
    
    if(operator =='+')
    {
        printf("This works!");
    }
}

【问题讨论】:

  • 我不认为if 坏了。如果您将operator 更改为op,您会得到相同的结果吗?
  • @Explosivo30 显示变量运算符是如何定义的。
  • @TimRandall 最大的问题是没有函数定义。我们需要一个minimal reproducible example
  • @KeithThompson 这是一个主观问题。就个人而言,我可以相当轻松地处理孤立的代码片段。我不能使用未定义的变量。它迫使人们要么做出假设,要么尝试处理多种可能性,这两种可能性都不是一个很好的答案
  • 我根据自己对scanf 通话的误读发布了错误答案。这完全是我的错,我已经删除了答案。您在问题中的代码中添加了更多上下文,但它不是minimal reproducible example。有人应该能够从您的问题中复制并粘贴代码并编译和运行它。这意味着您需要定义main 和所需的#include <stdio.h>。并且您需要在启用警告的情况下编译您的程序,并在您的问题中包含任何警告或错误消息。当我将您的代码扩展为一个完整的程序并编译它时,我会收到两条诊断消息。

标签: c if-statement while-loop printf scanf


【解决方案1】:

这段代码sn-p

    scanf(" %c", &operator);
    printf("You wrote %s\n", operator);
    
    if(operator =='+')
    {
        printf("This works!");
    }

独立于变量operator 的声明方式是不正确的。

如果变量operator 声明为

char operator;

那么这个语句

printf("You wrote %s\n", operator);

调用未定义的行为。

这种情况下你需要写

printf("You wrote %c\n", operator);

如果变量operator被声明为字符数组例如

char operator[N];

N 是某个值,那么至少是这个语句

if(operator =='+')

没有意义,条件总是会被评估为假。

注意while循环中的那个而不是这个条件

while(3>2)

写起来会更简单,更易读

while ( 1 )

【讨论】:

  • operator 被定义为char *operator; 那么sn-p 至少有一个错误,可能还有另外两个错误。
  • @JohnBollinger 未定义为 char * 仅衰减为 char *
  • 谢谢,我将 char 声明为 char operator[1]
  • @Explosivo30 我是这么认为的。:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多