为什么我的程序不循环从我的数据文件提取?

如何解决为什么我的程序不循环从我的数据文件提取?

我的程序应该从文件中提取数据并将其存储到三个变量中。我已经能够显示第一行数据,但是当我尝试循环它以显示其余行时,什么也没发生。

main.cpp:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct Game {
  string opponent;  
  unsigned goals_scored;
  unsigned goals_lost; 
};

int main() {
  Game one_game;
  ifstream game_data;
  game_data.open("schedule.csv");
  if(!game_data.is_open()){
    cout << "The file cannot be opened."<< endl;
    return -1;
  }
  getline(game_data,one_game.opponent,',');
  do {
    cout << one_game.opponent << endl;
    game_data >> one_game.goals_scored;
    cout << one_game.goals_scored << endl;
    game_data >> one_game.goals_lost;
    cout << one_game.goals_lost << endl;
    getline(game_data,');
  } while(game_data);
  game_data.close();
}

一些作业的细节:

第4步:使用>>,ignore和getline的组合来处理一行数据并更新one_game对象的不同数据成员。

最好一次处理一个数据。 例如,专注于将对手的名字添加到one_game.opponent中。使用输出语句来帮助您检查并查看读取是否成功。然后,您可以将CSUSM得分的进球数计入one_game.goals_scored。使用输出语句来帮助您检查并查看是否收集了正确的数据。然后,您可以对one_game.goals_lost做同样的事情。

第5步:确保该程序适用于一行输入数据后,然后进行一次do-while操作以确保您可以循环浏览输入文件中的所有14个游戏。请注意生成的输出,以确保正确使用>>,getline和ignore来处理从一行数据到另一行数据的过渡。如果在每个对手团队的名称前看到一个额外的空白行,则您缺少对ignore方法的调用。 知道循环正常工作后,就可以删除测试输出语句。

第6步:此后,一次进行一项分析。确保关闭ifstream对象并在循环后使用适当的标签显示结果,以使其他人理解您的结果。

这是输入文件(schedule.csv):

NO. 25 FRESNO PACIFIC,3,0
NO. 11 AZUSA PACIFIC,1,2
BIOLA,2
CONCORDIA IRVINE,2,5
HAWAI'I HILO,1
POINT LOMA,1
CAL STATE MONTEREY BAY,3
CAL STATE EAST BAY,0
CAL POLY POMONA,1
HUMBOLDT STATE,3
STANISLAUS STATE,1
CHICO STATE,2
UC SAN DIEGO,2
CAL STATE DOMINGUEZ,2

解决方法

您的问题陈述中确实提到了<div class="hidden-overlays-select"> <ul class="dropdown-list"> <li class="list">Test One</li> <li class="list">Test Two</li> <li class="list">Test Three</li> <li class="list">Test Four</li> </ul> <ul class="dropdown-list"> <li class="list">element 1</li> <li class="list">element 2</li> <li class="list">element 3</li> <li class="list">element 4</li> </ul> </div> <div class="selected-items d-flex align-items-center flex-fill"> <ul style="display: flex;"> <li class="select-option" style="margin-right: 1rem;"> Click Me </li> </ul> </div>方法,但是看来您选择了忽略::) 有关其规格,请参见here

因此,在示例代码中,在输入文本的每一行上,没有消耗任何东西,分隔两个数字的','逗号字符以及第二个数字之后的换行符。

IO系统将此视为格式错误,因此,在隐式转换为布尔值时,您的ignore文件句柄将转换为game_data,并且循环过早退出。

还请注意,阅读完所有内容后,句柄就不会出错。它在文件末尾,但尚未 hit 文件末尾。循环测试代码必须相应地重新安排。

可以添加所需的额外代码,如下所示:

false

然后:

#include  <limits>
#include  <iostream>
#include  <string>
#include  <fstream>

using namespace std;

struct Game {
    string    opponent;  
    unsigned  goals_scored;
    unsigned  goals_lost; 
};

上面的C ++代码按需工作。

int main()
{
    Game      one_game;
    ifstream  game_data;
    auto      tooBig = std::numeric_limits<std::streamsize>::max();

    game_data.open("schedule.csv");
    if (! game_data.is_open()) {
        cout << "The file cannot be opened." << endl;
        return EXIT_FAILURE;
    }

    getline(game_data,one_game.opponent,',');
    while (! (game_data.fail() || game_data.eof())) {
        //---- cout << "TOP-LOOP" << endl;

        cout << "Opponent: " << one_game.opponent << endl;

        game_data >> one_game.goals_scored;
        game_data.ignore(tooBig,');
        cout << "SCORED: " << one_game.goals_scored << endl;

        game_data >> one_game.goals_lost;
        game_data.ignore(tooBig,'\n');
        cout << "LOST:   " << one_game.goals_lost << endl << endl;

        getline(game_data,');
    }

    game_data.close();
    return EXIT_SUCCESS;
}

替代方法,基于仅使用$ g++ -std=c++14 football00.cpp -o ./football00.x && ./football00.x Opponent: NO. 25 FRESNO PACIFIC SCORED: 3 LOST: 0 Opponent: NO. 11 AZUSA PACIFIC SCORED: 1 LOST: 2 Opponent: BIOLA SCORED: 0 LOST: 2 Opponent: CONCORDIA IRVINE SCORED: 2 LOST: 5 Opponent: HAWAI'I HILO SCORED: 2 LOST: 1 Opponent: POINT LOMA SCORED: 0 LOST: 1 Opponent: CAL STATE MONTEREY BAY SCORED: 3 LOST: 3 Opponent: CAL STATE EAST BAY SCORED: 1 LOST: 0 Opponent: CAL POLY POMONA SCORED: 1 LOST: 1 Opponent: HUMBOLDT STATE SCORED: 0 LOST: 3 Opponent: STANISLAUS STATE SCORED: 3 LOST: 1 Opponent: CHICO STATE SCORED: 1 LOST: 2 Opponent: UC SAN DIEGO SCORED: 0 LOST: 2 Opponent: CAL STATE DOMINGUEZ SCORED: 3 LOST: 2 $ SO-q56805847

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-