我正在尝试调试一个从标准输入中获取值“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/