Проблема с вводом и выводом в и из файла .txt - PullRequest
0 голосов
/ 11 февраля 2019

Моя домашняя работа состоит в том, чтобы рассчитать сопротивление в омах резистора, дать текстовый файл с информацией об резисторе.Используя этот текстовый файл, я вычисляю сопротивление и распечатываю его в другой текстовый файл.Когда я запускаю этот код, я получаю сообщение об ошибке «Ошибка проверки времени выполнения № 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;
}

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

возможно, вы неправильно поняли случай переключения.Вы должны включать оператор break после каждого случая, если он не добавлен, все случаи будут выполняться независимо от ввода.И второе, вы должны инициализировать переменные перед их использованием.Надеюсь, это поможет.Ура !!Не стесняйтесь задавать любые сомнения.

0 голосов
/ 11 февраля 2019

Ошибка проверки времени выполнения # 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;

Скорее всего, это int num из функции col_to_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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...