我的代码遇到了一些问题。
我的程序根据来自输入文件的三个波段的颜色计算阻力量,然后打印到输出文件。
示例输入文件:
red, green, blue
green, gray, yellow
示例输出文件:
Resistance in ohms = 680
Resistance in kilo-ohms = 1420
但是,每次运行程序时都会崩溃。我做了一些调试,发现yellow
函数的decodeString
索引存在问题,给它一个NULL
值。我通过将值传递给函数decodeString
而不是使用指针来部分解决了这个问题,现在它似乎有效。
现在我没有得到我期望的正确输出,我不知道错误来自哪里。我运行的代码,但目前没有给出正确的输出。我只是不知道在哪里看。
认为有人可以帮我解决这个问题吗?或者,如果有任何我可能做错的事情,请指出并解释为什么它出错了。非常感谢!
注释行用于调试。
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define size 100
int DecodeString(char inputString[]){
const char kColorTable[10][10] = {"black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "gray", "white"};
int i;
for(i=0; i<10; i++){
printf("\n>>%s,%s", inputString, kColorTable[i]);
if(strcmp(inputString, kColorTable[i]) == 0){
return i;
}
}
return -1;
}
int main(){
int i=0, colord[3]={0,0,0};
char color[size], *token, *inputString;
double resistance=0, value;
FILE *fptrin, *fptrout;
if(((fptrin = fopen("input.txt", "r"))==NULL) || ((fptrout = fopen("output.txt", "w")) == NULL)){
printf("Error 404: File not found");
exit(1);
}
while(fgets(color, size, fptrin) != NULL) {
i = 0;
token = strtok(color, ", \n");
while(token != NULL && i < 3) {
colord[i] = DecodeString(token);
i++;
token = strtok(NULL, ", \n");
}
if (colord[0] == -1 || colord[1] == -1 || colord[2] == -1){
printf("\n\nBad code -- cannot compute resistance\n");
}
else{
resistance = (10.0 * colord[0] + colord[1]) * pow(10.0, colord[2]);
}
printf("%f",resistance);
if(resistance > 1000){
fprintf(fptrout,"Resistance in Kilo-Ohms: %f",resistance/1000);
}
else{
fprintf(fptrout,"Resistance in Ohms: %f",resistance);
}
}
//fclose(fptrin);
//fclose(fptrout);
getchar();
return 0;
}
我试图调试我的程序以找出发生了什么,这是我得到的结果。我想这就是为什么我无法正确输出。
蓝色,黑色
蓝色,棕色
蓝色,红色
蓝色,橙色
蓝色,黄色
蓝,绿
蓝色,蓝色
红,黑
红色,棕色
红,
,blackn
,brownn
,redown
,橙色
,黄
,greenn
,bluewn
,紫
,graywn
,美白
我没有意识到这是我复制过的旧代码。结果保持不变。