Я ударил полный блокпост на этом, я не совсем хорош с указателями и обработкой файлов atm и uni. двигался слишком быстро, что я не могу угнаться ...Проблемы с программой, которая декодирует сопротивление по цвету в C
Ожидаемый ввод из файла любой из цветов из массива:
input.txt
красный, зеленый, синий
черный, белый, серый
...
, который затем выводит в файл:
output.txt
красный, зеленый, синий
сопротивление в Ом: 7000000,000000
черный, белый, серый
Сопротивление в Ом: 1000000,000000
...
мой выход прямо сейчас:
красный, зеленый, синий
Сопротивление в Ом: 0,000000
черный, белый, серый
Сопротивление в Ом: 0,000000
до сих пор вот мой код:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define size 100
double DecodeString(char *inputString){
const char *kColorTable[10] = {"black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "gray", "white"};
int i;
for(i=0; i<10; i++){
if(strcmp(inputString, kColorTable[i]) == 0){
return (double)i;
}
}
return -999.0;
}
int main(){
char color[size], *token, *inputString;
double resistance, color1, color2, color3;
double 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)){
token = strtok(color, ",");
DecodeString(token);
puts("");
while(token != NULL){
value = DecodeString(token);
printf("%s",token);
token = strtok(NULL, ",");
}
}
//value = DecodeString(color);
if (color1 == -999.0 || color2 == -999.0 || color3 == -999.0){
printf("\n\nBad code -- cannot compute resistance\n");
}
else{
resistance = (10.0 * color1 + color2) *pow(10.0, color3);
if(resistance > 1000){
printf("\n\nResistance in Kilo-ohms: %f\n",resistance);
}
else{
printf("\n\nResistance in ohms: %f\n",resistance);
}
}
fclose(fptrin);
fclose(fptrout);
getchar();
return 0;
}
Я застрял в моем цикле strtok, я не совсем уверен, как передать эти значения в функцию и назначение значения из функции color1
, color2
, color3
использовать для расчета Ом.
Я не понимаю, когда я прохожу token
к DecodeString
он возвращает только значение первой строки, а не каждой отдельной строки (возможно, я не хватает для цикла)
У меня есть другой код, где я на основе мой код от чьей-то функции:
#include<stdio.h>
#include<stdlib.h>
#include<strings.h>
#include<math.h>
#define size 100
double DecodeString(char *inputString)
{
const char *kColorTable[11] =
{"", "black", "brown", "red", "orange", "yellow",
"green", "blue", "violet", "gray", "white"};
int i;
for(i=0; i<11; i++)
{
if(strcmp(inputString, kColorTable[i]) == 0)
{
return (double)i;
}
}
return -999.0;
}
int main(void){
char color[size], *token, *inputString;
double 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)){
token = strtok(color, ",");
DecodeString(token);
puts("");
while(token != NULL){
value = DecodeString(token);
printf("%s",token);
token = strtok(NULL, ",");
}
//value = DecodeString(token);
printf("%f\n",value + value) *pow(10.0, value);
}
return 0;
}
Я ударил серьезный контрольно-пропускной пункт и был бы признателен за пояснения и примеры, чтобы лучше понять, что происходит.
Пожалуйста, дайте вход тест, ожидаемый вывода и фактического выхода. – kaylum
Я добавил вход и выход уже ... –
Если в качестве входных данных используются пробелы как запятые, которые вы хотите использовать в качестве разделителей, тогда вы должны включить пробел во второй [strtok] (http: // www. cplusplus.com/reference/cstring/strtok/), например: 'token = strtok (color,", ");' – samgak