将值从文本文件传递到数组

2024-03-20

我的代码有一些问题。

我的程序根据来自输入文件的三个带的颜色计算电阻值,然后打印到输出文件。

输入文件示例:

红、绿、蓝
绿色、灰色、黄色

输出文件示例:

电阻(欧姆)= 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;
}

所以我尝试调试我的程序以找出发生了什么,这就是我得到的结果。

蓝黑
蓝色、棕色
蓝红
蓝色、橙色
蓝色、黄色
蓝绿
蓝色,蓝色
红黑
棕红色
红色,红色
,黑色的
,棕色的
,重降
,橙子
,黄色的
,格林
,蓝胜
,紫色
,灰色
,美白


我看到的代码中的第一个错误是您没有从输入字符串中删除空格,您可以通过将标记分隔符字符串更改为" ,"。您还可以通过同时删除换行符来稍微简化代码。

限制范围也是明智的i因为任何超过 3 种颜色的行都会破坏数组colord[],这会引起您对第二个错误的注意,即您忘记重置i在循环内,这可以解释为什么你会崩溃。

while(fgets(color, size, fptrin) != NULL) {
    i = 0;                                  // reset `i`
    token = strtok(color, " ,\n");          // test for space and newline
    while(token != NULL && i < 3) {         // test `i` too
        colord[i] = DecodeString(token);
        i++;
        token = strtok(NULL, " ,\n");       // test for space and newline
    }
}

最后,在显示 kOhms 时应除以 1000。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将值从文本文件传递到数组 的相关文章

  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 将代码拆分为标头/源文件

    我从 Asio 的示例页面中获取了以下代码 class tcp connection public boost enable shared from this
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • Java EE7 中的多个 Web 套接字端点或单个 Web 套接字端点哪个更好

    Java EE 7 允许您通过注释非常轻松地创建新端点 但是 我想知道使用多个端点来处理每种消息类型是一个好主意 还是应该只使用一个端点外观来处理所有内容 我倾向于拥有一个单一端点外观 其理论基础是每个端点都会创建一个到客户端的新套接字连接
  • 如何在没有通用视图的 post_save_redirect 参数的情况下重定向到 Django 中新创建的对象

    我正在尝试将用户重定向到新创建的对象object get absolute url 保存表格后 我没有使用通用视图 所以我不能使用post save redirect争论 的相关部分view就像这样 if form is valid for
  • MemorySharp 设置地址偏移量不起作用

    好的 我正在使用MemorySharp用于读取 写入游戏内存的库 我的问题是 当我尝试将偏移量添加到基指针地址时 Visual Studio 在运行时会引发错误 这是基本代码 using var m new MemorySharp Appl
  • 无法比较飞行中的 ping 时间

    我尝试以下命令失败 sdiff lt ping www nato int lt ping www reuters com 有什么办法可以实时比较 ping 时间吗 通常我只是并排打开两个 xterm 然后在每个 xterm 中运行 ping
  • 使用可滚动结果集在休眠中批量读取数据

    我正在阅读一篇关于使用休眠进行批量获取的博客http java dzone com articles bulk fetching hibernate http java dzone com articles bulk fetching hi
  • 编译错误:Lambda 目标类型交集类型

    public class X Object o I J gt interface I public void foo interface J public void foo public void bar Oracle 编译器抛出错误 X
  • WCF服务路由,瓶颈?

    我们的应用程序服务器体系结构经过设置 以便每个服务调用都经过自定义构建的 WCF 服务路由器 一个使用请求消息标头中嵌入的信息将传入请求分发到适当服务的服务 我们在使用此 WCF 服务路由器时遇到性能问题 对并发用户进行负载测试时超时 我们
  • WinRT 中的应用程序间通信

    Windows 8 上有两个 WinRT 应用程序 C Xaml 如果有的话 第一个应用程序应该接收一些数据并将其发送到第二个应用程序中 最好的方法是什么 可以使用WCF吗 编辑 第一个应用程序知道第二个应用程序 实际上第二个应用程序是一个
  • 使用 JDBC 进行批量插入的有效方法

    在我的应用程序中 我需要进行大量插入 它是一个 Java 应用程序 我使用普通 JDBC 来执行查询 数据库是Oracle 不过 我启用了批处理 因此它节省了执行查询的网络延迟 但查询作为单独的 INSERT 串行执行 insert int
  • 模拟来自developer.sandbox.com的recurring_ payment_skipped IPN

    当定期付款失败时 我需要模拟 IPN 然后 我的应用程序可以创建待处理发票并将其发送给客户 我搜索并发现我需要设置将在下面处理的 IPNtxn type recurring payment skipped recurring payment
  • 验证货币输入的最佳方法?

    我创建了 TextBox 和 CompareValidator 我认为它们将允许以下形式的输入 5 5 00 5 00 不幸的是 它不允许带有美元符号的版本 如果不允许美元符号 那么对货币进行类型检查有什么意义呢 有没有办法允许这个符号
  • 如何对总和为 100% 的一组数字进行四舍五入

    今天 我的一位朋友向我展示了网站上的一个错误 Link http img594 imageshack us img594 7605 mrul png 您可以看到百分比之和为 100 1 49 20 7 10 9 7 5 5 7 100 1
  • JQuery 验证未验证

    我正在尝试使用 JQuery 验证器插件来验证 Rails 应用程序 但它既不会抛出任何错误 也不会验证任何内容 我不知道我的代码还有什么问题 任何帮助将不胜感激 document ready function theform valida
  • 如何解决“值对于 dtype('float32') 来说太大?”

    我读了很多与此类似的问题 但仍然无法弄清楚 clf DecisionTreeClassifier clf fit X train y train X to predict array 1 37097033e 002 0 00000000e
  • 是否可以有一个函数接受任意数量、任意类型的变量?

    我有一个简单的函数 它接受一个字符串并用该字符串向我发送一封电子邮件 该函数在调试实时站点时使用 public void errEmailV1 string strVars sendEmail me email emailSubject s
  • 测试控制器有意义吗

    我有一个简单的 MVC 应用程序 由视图 gt 控制器 gt 服务 gt 模型组成 我的控制器真的很瘦 他们所做的就是调用服务方法并填充 ModelAndView 对控制器进行单元测试以确保它们在完全模拟服务的同时在 ModelAndVie
  • 查询以搜索所有包中的表和/或列

    是否可以运行查询来搜索所有包以查看包中是否使用了特定的表和 或列 包太多 无法打开每个包并查找我正在寻找的值 你可以这样做 select from user source where upper text like upper SOMETE
  • 困惑:Django“无法导入app.views”但可以导入app,在WSGI中?

    我遇到了一个奇怪的 Django 问题 使用 mod wsgi 运行 Django 姜戈正在寻找urls py 然后说 ViewDoesNotExist Could not import app views Error was No mod
  • 在 .dot 树中强制执行水平节点排序

    我正在尝试使用 GraphViz 重新创建二叉搜索树的示例图 它最终应该是这样的 这是我的第一次尝试 digraph G nodesep 0 3 ranksep 0 2 margin 0 1 node shape circle edge a
  • 将值从文本文件传递到数组

    我的代码有一些问题 我的程序根据来自输入文件的三个带的颜色计算电阻值 然后打印到输出文件 输入文件示例 红 绿 蓝绿色 灰色 黄色 输出文件示例 电阻 欧姆 680电阻 千欧姆 1420 然而 每次我运行该程序时它都会崩溃 我进行了一些调试