比较从stdin读取的字符输入

时间:2015-11-17 06:38:01

标签: 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);

}

2 个答案:

答案 0 :(得分:2)

您定义的错误是将数组传递给calc_resistance()函数,当它被定义为只接受一个char时。

看到输入模式,connection_type不需要是一个数组,在%c格式说明符的帮助下,您可以轻松地将connection_type设为char scanf()变量来处理输入。

您可以在com.android.support:appcompat-v7: 21.0.+ -> 23.1.0 com.android.support:recyclerview-v7: 21.0.+ -> 23.1.0 com.mcxiaoke.volley:library: 1.0.+ -> 1.0.19 jp.wasabeef:recyclerview-animators: 1.1.0 -> 2.0.1 com.daimajia.easing:library: 1.0.1 -> 1.0.2 com.android.support:gridlayout-v7: 22.0.0 -> 23.1.0 的{​​{3}}上详细了解相关信息。此外,在每次迭代后,不要忘记清除剩余的换行符

故事的道德::启用编译器警告并注意它们。

答案 1 :(得分:0)

你想检测前两种情况对吗?如果是,那么试试这个,而不是在你的函数中传递整个地址

 calc_resistance(connection_type)
只传递一个字符然后尝试,你可以修改代码如下。


    #include 
    #include 
    #include 

    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[0]);

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

    }