C .txt文件的输入和输出有问题

C .txt文件的输入和输出有问题,c,C,我的作业是计算电阻器的电阻(单位:欧姆),并给出一个包含电阻器信息的文本文件。使用这个文本文件,我计算阻力并将其打印到另一个文本文件中。当我运行这段代码时,我得到一个调试错误“运行时检查失败#3-T”,并且没有输出到文件。你能告诉我哪里出了问题吗 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<math.h> int col_to_num(char color, int choice) { i

我的作业是计算电阻器的电阻(单位:欧姆),并给出一个包含电阻器信息的文本文件。使用这个文本文件,我计算阻力并将其打印到另一个文本文件中。当我运行这段代码时,我得到一个调试错误“运行时检查失败#3-T”,并且没有输出到文件。你能告诉我哪里出了问题吗

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<math.h>
int col_to_num(char color, int choice) {
    int num;
    switch (color) {
    case 'B':if (choice == 1) num = 0;
             else if (choice == 2) num = 1;
             else if (choice == 3)num = 6;

    case 'b':if (choice == 1) num = 0;
             else if (choice == 2) num = 1;
             else if (choice == 3)num = 6;

    case 'G':if (choice == 1) num = 5;
             else if (choice == 2) num = 8;
             else if (choice == 3)num = -1;
    case 'g':if (choice == 1) num = 5;
             else if (choice == 2) num = 8;
             else if (choice == 3)num = -1;
    case 'R':num = 2;
    case 'r':num = 2;
    case 'O':num = 3;
    case 'o':num = 3;
    case 'Y':num = 4;
    case 'y':num = 4;
    case 'V':num = 7;
    case 'v':num = 7;
    case 'W':num = 9;
    case 'w':num = 9;
    case 'S':num = 10;
    case 's':num = 10;
    }
    return num;
}
int main() {
    double resistance, thirdband;
    char color1, color2, color3;
    int val1, val2, val3;
    FILE *inp, *outp;
    inp = fopen("resistorcolor.txt", "r");
    outp = fopen("resistorvalue.txt", "w");
    if (inp == NULL) {
        printf("The input file does not exist\n");
    }
    else {
        while (fscanf(inp, "%c %d %c %d %c %d%*c", &color1, &val1, &color2, &val2, &color3, &val3) != EOF) {
            if (col_to_num(color3, val3) == -1)thirdband = .01;
            if (col_to_num(color3, val3) == 10)thirdband = .01;
            if (col_to_num(color3, val3) == 0)thirdband = 1;
            if (col_to_num(color3, val3) == 1)thirdband = 10;
            if (col_to_num(color3, val3) == 2)thirdband = 100;
            if (col_to_num(color3, val3) == 3)thirdband = 1000;
            if (col_to_num(color3, val3) == 4)thirdband = 10000;
            if (col_to_num(color3, val3) == 5)thirdband = 100000;
            if (col_to_num(color3, val3) == 6)thirdband = 1000000;
            resistance = ((col_to_num(color1, val1) * 10) + col_to_num(color2, val2))*thirdband;
            fprintf(outp, "%.2lf Ohm", resistance);
            thirdband = 0;
        }
        fclose(outp);
    }
    return 0;
}
\define\u CRT\u SECURE\u NO\u警告
#包括
#包括
int col_to_num(字符颜色,int选项){
int-num;
开关(彩色){
案例“B”:如果(选项==1)num=0;
如果(选项==2)num=1,则为else;
如果(选项==3)num=6,则为else;
案例“b”:如果(选项==1)num=0;
如果(选项==2)num=1,则为else;
如果(选项==3)num=6,则为else;
案例“G”:如果(选项==1)num=5;
如果(选项==2)num=8,则为else;
如果(选项==3)num=-1;
案例“g”:如果(选项==1)num=5;
如果(选项==2)num=8,则为else;
如果(选项==3)num=-1;
案例“R”:num=2;
案例“r”:num=2;
案例“O”:num=3;
案例“o”:num=3;
案例“Y”:num=4;
案例“y”:num=4;
案例“V”:num=7;
案例“v”:num=7;
案例“W”:num=9;
案例“w”:num=9;
案例:num=10;
案例:num=10;
}
返回num;
}
int main(){
双电阻,第三带;
字符颜色1,颜色2,颜色3;
int val1,val2,val3;
文件*inp,*outp;
inp=fopen(“resistorcolor.txt”,“r”);
outp=fopen(“resistorvalue.txt”,“w”);
如果(inp==NULL){
printf(“输入文件不存在\n”);
}
否则{
而(fscanf(inp,“%c%d%c%d%c%d%*c”、&color1、&color1、&color2、&color3、&val3)!=EOF){
if(col_to_num(color3,val3)=-1)thirdband=.01;
如果(col_to_num(color3,val3)=10)第三个带=.01;
如果(col_to_num(color3,val3)=0)第三个边=1;
如果(col_to_num(color3,val3)=1)第三个边=10;
如果(col_to_num(color3,val3)=2)第三个边=100;
如果(col_to_num(color3,val3)=3)第三个边=1000;
如果(col_to_num(color3,val3)=4)第三个边=10000;
如果(col_to_num(color3,val3)=5)第三个边=100000;
如果(col_to_num(color3,val3)=6)第三个带=1000000;
阻力=((col_to_num(color1,val1)*10)+col_to_num(color2,val2))*thirdband;
fprintf(输出,.2lf欧姆%,电阻);
第三边=0;
}
fclose(outp);
}
返回0;
}
运行时检查失败#3表示未初始化就使用了某些内容。还有更多的信息你没有看到。错误消息应该是“运行时检查失败#3:正在使用变量‘XXX’而未初始化”,其中XXX是代码中的一个变量

在任何情况下,您都有许多未初始化的变量,这些变量应初始化为某些默认值:

double resistance = 0.0, thirdband = 0.0;
char color1 = 0, color2 = 0, color3 = 0;
int val1 = 0, val2 = 0, val3 = 0;
FILE *inp = nullptr, *outp = nullptr;

对于功能:

int col_to_num(char color, int choice) {
    int num = -1;
最有可能的是col_to_num函数中的
int num
,如果您没有传入其中一个值,它将永远不会遇到任何情况。您需要中断以退出switch语句,通常是在您的条件被命中之后,但是您可以通过不中断将案例分组在一起,这样您就可以轻松地对不同的案例执行相同的操作。从匹配的案例开始,可以将其视为失败。如果没有这样匹配的案例,您还需要处理默认案例:

int col_to_num(char color, int choice) {
    int num = -1;
    switch (color) {
    case 'B':
    case 'b':
        if (choice == 1) num = 0;
        else if (choice == 2) num = 1;
        else if (choice == 3)num = 6;
        break;
    case 'G':
    case 'g':
        if (choice == 1) num = 5;
        else if (choice == 2) num = 8;
        else if (choice == 3)num = -1;
        break;
    case 'R':
    case 'r':
        num = 2;
        break;
    case 'O':
    case 'o':
        num = 3;
        break;
    case 'Y':
    case 'y':
        num = 4;
        break;
    case 'V':
    case 'v':
        num = 7;
        break;
    case 'W':
    case 'w':
        num = 9;
        break;
    case 'S':
    case 's':
        num = 10;
        break;
    default:
        printf("Invalid input: %c\n", color);
    }
    return num;
}

也许你对开关箱的理解有误。您需要在每个case之后包含break语句。如果不添加,则所有case都将运行,不管输入是什么。第二件事是,在使用变量之前必须初始化它们。希望有帮助。干杯请随时提出疑问。

什么是“运行时检查失败#3-T”?有没有办法发布有关错误的更多详细信息?另外,请注意:col_to_num()中的switch语句中没有break语句。这意味着无论发生什么情况,它都将返回10。如果没有任何案例匹配,col_to_num可以返回未初始化的num…而且您的swich/cases都会通过,因为您没有任何中断来分隔它们。旁注:您可以通过使用
case'B':case'B:/*convert B或B*/break来适当地利用这个漏洞
保存重复的代码块。建议突出显示添加
break
语句的原因。如果询问者知道它们为什么重要,那么询问者很可能会将它们包括在内。