我正在尝试调试一个程序,我正在获得价值观' 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);
}
答案 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); }