【发布时间】:2016-12-04 19:13:21
【问题描述】:
我目前的任务是为从文件读取的电阻解码器编写代码。
具体来说,我的代码必须从文件输入中读取,该文件输入具有由逗号分隔的三个颜色带: 输入.txt
红、绿、蓝
黑色、橙色、黄色
然后它必须使用从 0 一直到 9 的每种颜色的一组值来解码这些颜色
最后,它必须计算每种颜色加起来的阻力乘以 10^n
例如,如果第一个波段是红色,第二个是绿色,第三个是蓝色,则电阻值为 50 × 103 欧姆。
编辑:这是我现在的代码,我仍然不知道如何将值从我的 strtok 传递给函数,我不太擅长使用指针,它让我和文件处理一起搞砸了,所以我真的不知道我的循环中发生了什么(事实上,这是我教授的循环代码,她让我们开始使用)自从大学以来,我几乎没有在这些主题上进行过任何练习。移动得太快了,所以我没有太多经验。
对我的 strtok 循环以及如何将其值传递给函数的解释会很好,并且一些示例可以更好地理解它会很棒!
#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 code;
char color[size], *token, code1, code2, code3, *inputString;
double resistance, color1, color2, color3;
double value = DecodeString(inputString);
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 - 1, fptrin)){
token = strtok(color, ",");
puts("");
while(token != NULL){
printf("%s",token);
token = strtok(NULL, ",");
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;
}
我一直在根据您给我的功能进行一些练习和测试,但我仍然无法弄清楚如何使事情起作用。我在这里遇到了一个完全的障碍,我不确定下一步该怎么做:/
#include<stdio.h>
#include<stdlib.h>
#include<strings.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(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 - 1, fptrin)){
token = strtok(color, ",");
DecodeString(color);
puts("");
while(token != NULL){
printf("%s",token);
token = strtok(NULL, ",");
}
//printf("color value: ");
printf("%f\n", value);
}
return 0;
}
【问题讨论】:
-
您需要将来自 strtok 循环的字符串转换为从 0 到 9 的值的代码。现在
code未使用。考虑建立一个字符串名称表,并按顺序与每个字符串进行比较。将字符串排成一行,以便在表格中放置它们的值。然后,当您遍历可能的字符串时,循环的索引将是您的数学运算所需的整数值。 -
除了前面的注释之外,您还比较了
fgets的返回值(它返回一个指向char 的指针)和EOF,它是一个int。我认为您需要将其与NULL进行比较。 -
另外,
fgets不采用像“%s”这样的格式说明符。也许您的意思是使用sscanf。如果您打算使用fgets,它的第二个参数是int,指定输入缓冲区的大小,而不是字符串。 -
另外,您对不存在的输入文件的检查不起作用。你应该把它改成
if(((fptrin = fopen("input.txt", "r"))==NULL) || ((fptrout = fopen("output.txt", "w")) == NULL)){
标签: c