Я столкнулся с этим полным препятствием, я не совсем хорошо разбираюсь в указателях и обработке файлов atm и uni. двигался так быстро, что я не успеваю...
Ожидаемый ввод из файла — любой из цветов из массива:
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
, он возвращает только значение первой строки, а не каждой отдельной строки (возможно, мне не хватает цикла for)
У меня есть другой код, в котором я основывал свой код на чьей-то функции:
#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;
}
Я столкнулся с серьезным препятствием и был бы признателен за некоторые объяснения и примеры, чтобы лучше понять, что происходит.
token = strtok(color, " ,");
- person samgak   schedule 05.12.2016colorX
? - person kaylum   schedule 05.12.2016decodeString
возвращает 0 вместоblack
— это то, что вы хотели? Если вы сообщаете значение в кОм, не нужно ли делить еще и на 1000? - person Jonathan Leffler   schedule 05.12.2016