比较从标准输入读取的字符输入

标签 c char compare strcmp

我正在尝试调试一个从标准输入中获取值“S”或“P”的程序。我的函数 calc_resistance() 需要区分这两种情况以及既没有输入 'S' 也没有输入 'P' 的情况.该程序总是评估第三种情况(既不是 'S' 也不是 'P'`),为什么会这样?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

float calc_resistance(char conn) {

float retval = 0.0;

 if (conn == 'S') {
   retval = 1;
 }
 else if (conn == 'P') { 
   retval = 2;
 }
 else {
   retval = -1;
 }
 return retval;
}

int main() {
  char connection_type[25];
  float resistance = 0.0;

  while(1) {
    printf("Enter 'S' or 'P': ");
    scanf("%s", connection_type);
    if(strlen(connection_type) != 1 ||
       (strncmp(connection_type,"S",25) && strncmp(connection_type,"P",25))) {
      printf("Answer not understood. Enter 'S' or 'P'.\n");
      continue;
    }
    break;
 }

  resistance = calc_resistance(connection_type);

  printf("Connection type: %f", resistance);

}

最佳答案

您犯的错误是将数组传递给 calc_resistance() 函数,而该函数被定义为仅接受单个 char

看输入模式,connection_type不需要是数组,借助%c格式说明符,可以很容易的生成connection_type 用于处理输入的单个 char 变量。

您可以在 man page 上阅读更多相关信息scanf() 的。此外,在每次迭代后,不要忘记清除剩余的换行符

故事的寓意::启用编译器警告并留意它们。

关于比较从标准输入读取的字符输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33750622/

相关文章:

c++ - string.compare for c++

c++ - 将原始 PCM 转换为 FLAC?

c - 如何调用静态函数

c++ - 在 C++ 中向 char* 添加 char 前缀的最佳方法?

c - c中指针的声明

c++ - 关于char的签名问题

c - 如何从 C 中的值数组格式化字符串?

c++ - 如果我不知道返回类型和参数,如何使用 dlsym() 调用函数?

c++ - 关于c++中的 'compare'函数

c++ - 将 8 位值与 16 位值进行比较