У меня возникли проблемы с моим кодом.Передача значений из текстового файла в массив
Моя программа вычисляет количество сопротивления в зависимости от цвета трех полос, поступающих из входного файла, а затем распечатывается в выходной файл.
Пример входного файла:
красный, зеленый, синий
зеленый, серый, желтый
Пример выходного файла:
сопротивление в омах = 680
Сопротивление в кило-омах = 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){
token = strtok(color, ",");
while(token != NULL){
if(token[strlen(token)-1]=='\n')
token[strlen(token)-1]='\0';
colord[i] = DecodeString(token);
//printf(">>%s:%d ",token,colord[i]);
i++;
token = strtok(NULL, ",");
puts("");
}
//printf("<><>");
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);
}
else{
fprintf(fptrout,"Resistance in Ohms: %f",resistance);
}
}
//fclose(fptrin);
//fclose(fptrout);
getchar();
return 0;
}
Поэтому я попытался отладить свою программу, чтобы узнать, что происходит, и это результат, который я получаю.
синий, черный
синий, коричневый
синий, красный
синий, оранжевый
синий, желтый
синий, зеленый
синий, синий
красный, черный
красный, коричневый
красный, красный
, blackn
, brownn
, redown
, оранжевый
, желтый
, greenn
, bluewn
, фиолетовый
, graywn
, отбеливает
'файл не найден 'будет вызывать путаницу, когда проблема будет отсутствием разрешения. Попробуйте 'if (fopen (path," r ") == NULL {perror (path) ...' –
Можете ли вы привести пример с ожидаемым результатом и тем, что вы получаете вместо этого? Одна очевидная вещь: при выводе в kOhms вы должны разделите число на 1000. –
Кроме того: если вы добавите новую строку в строку разделителей токенов, которая немного очистит код - 'strtok (color,", \ n ");' и 'strtok (NULL,", \ n ");' –