标题:文件读取在控制台输出问题
只看楼主
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
结帖率:100%
已结贴  问题点数:20 回复次数:4 
文件读取在控制台输出问题
#include <iostream>
#include <fstream>
#include <string>
#define N 9999
using namespace std;
int main(int argc, const char * argv[]) {
    string words[N];
    string wordsMeaning[N];
    int wordsNumber;
    ifstream infile;
    infile.open("WordsData.txt");
    infile >> wordsNumber;
    for(int i = 0; i < wordsNumber; i++) {
        infile >> words[i] >> wordsMeaning[i];
    }
    infile.close();
    cout << wordsNumber << endl;
    for(int i = 0; i < wordsNumber; i++) {
        cout << words[i] << " " << wordsMeaning[i] << endl;
    }
    return 0;
}

代码如上,大概就是把文件中的单词和单词意思分别读入两个数组中
在读入单词之前 先读入第一行的数字,这个数字是单词总个数
大致的问题就是在vs下选择开始调试,可以正常输出所有单词,但是选择开始执行就不能输出所有单词,只能输出变量wordsNumber
而wordsNumber并不是4500,而是一个负数
这说明在直接运行的时候,根本就没有读入第一行并且赋值给wordsNumber
想问一下如何去修改才能保证直接运行的时候也是输出所有单词
WordsDatas.txt的文件大致如下

在vs下直接运行结果:

在vs下调试窗口的结果:

在Xcode下调试的结果也是同样:
搜索更多相关主题的帖子: 控制台 include 
2017-05-19 17:58
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
infile.open("WordsData.txt");
也就是打开“当前目录”下的WordsData.txt
但“当前目录”是什么?
2017-05-19 20:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
你先看看当前路径是什么
http://en.
2017-05-19 20:59
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:0 
回复 3楼 rjsp
把网页里面的代码写进去或者做了修改之后编译都过不了
试过GetCurrentPath()
vs2015也过不了编译
试着把关于这个工程下的所有目录都放一个WordsData.txt还是输出不出来
2017-05-20 14:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
把网页里面的代码写进去或者做了修改之后编译都过不了
------ 标准的C++代码就得用支持标准C++的编译器,你用VC的话,看看下面这篇微软的说明行不行?不行的话你就得用winapi GetCurrentDirectory 了。
https://msdn.(v=vs.120).aspx

试过GetCurrentPath(),vs2015也过不了编译
------ 不知道你在说什么,你这个GetCurrentPath是什么东西,哪里来的?我给你的链接中没这个函数吧

试着把关于这个工程下的所有目录都放一个WordsData.txt还是输出不出来
------ 再说一次,infile.open("WordsData.txt") 是打开“当前目录”下的WordsData.txt,你得将此文件放在“当前目录”下才有效,与你的工程所在目录没有任何关系。而“当前目录”在程序启动时和运行过程中是可能随时变化的。
一种不太保稳的办法是用argv[0]来获得当前程序的路径,然后拼接出你这个WordsData.txt的绝对路径再传给ifsteam。之所以说“不太保稳”是因为C标准只是“建议”argv[0]存放当前程序的路径,而非“强制”要求。
2017-05-20 19:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-477156-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015383 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved