【问题标题】:Compilation error "s is undeclared," but it is the result of `scanf`编译错误“s is undeclared”,但它是`scanf`的结果
【发布时间】:2014-05-31 12:34:33
【问题描述】:

这是我的代码,用于计算串联或并联电阻器,错误在第 12 行

if ( sp == s )

完整的代码,以防之前的错误

#include <stdio.h>

int main ( void ) {
    char sp ;
    float a, b, resistancep, resistances ;
    printf ("Enter s for resistor in series or p for parallel\n") ;
    scanf ( " %c", &sp ) ;
    printf ("Enter two resistors calculate\n" ) ;
    scanf ("%f%f", &a, &b ) ;
    resistancep = a * b / ( a + b ) ;
    resistances = a + b ;
    if ( sp == s ) {
            printf ( "The total resistance is%f\n", resistances ) ;
    }
else {
            printf ( "The total resistance is%f\n", resistancep ) ;
    }

我也试过

if ( sp == "s" )

if ( sp, s )

【问题讨论】:

  • 请使用您使用的语言进行编辑和标记(我猜是 C)。
  • 只是好奇:if ( sp, s ) 应该是什么意思?

标签: c if-statement char scanf


【解决方案1】:

你可能想要

if ( sp == 's' )

只是 s 正在寻找一个名为 s 的变量,你还没有声明它。

"s" 通常指的是一个字符串,它是一个字符数组。您正在从输入中读取单个字符,以及"s" != 's'。请记住,数组(几乎)永远不会等于数组的元素。

【讨论】:

  • 好吧,从技术上讲,如果 cpu 架构和内存布局恰到好处,一个字符串可以等于它的第一个字符...
  • @Kevin,非常正确(如果这样做可能会成为令人讨厌的错误)。为了确定,我限定了“从不”。
  • 一个数组从不等于数组的一个元素,也不是不相等的。 "s"char[2] 类型,衰减为char*'s' 的类型为 int"s" != 's' 既非真亦非假;这是一个编译时错误。
  • @Kevin:不,字符串不能等于它的第一个字符;它们是无法比较的不同类型。
  • @KeithThompson 我收到编译时间警告
猜你喜欢
  • 2015-12-10
  • 2012-10-22
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 2020-03-01
  • 2019-01-24
相关资源
最近更新 更多