【问题标题】:cannot read the text file properly anymore无法再正确读取文本文件
【发布时间】:2015-01-22 13:48:57
【问题描述】:

好吧,基本上这是我的程序,它读取一个文本文件并将其放入一个数组中,最后我打印出该数组中的所有内容。该程序运行良好,并在几天内产生了正确的结果。但是,它今天刚刚停止工作。例如文本文件是

88
687
472
671

但是在程序完成后,输出是 0 1073741824 0 1073741824。我不知道发生了什么,唯一一次我对 bash 进行了一些更改是 ulimit -s unlimited。有什么想法吗?

int main(int argc, char *argv[])
{
    ifstream file(argv[1]);
    int placeholder;
    int size = pow(2,atoi(argv[2]));
    int array[size];
    int index = 0;
    while (file >> placeholder)
    {
        array[index]=placeholder;
        index++;
    }

    for(int i = 0; i<size; i++)
    {
        cout<<array[i]<<endl;
    }
    return 0;
}

【问题讨论】:

  • 可能没有成功打开文件。您尝试从流中读取而没有首先检查它是否有效——也许它根本没有读取任何内容,并且您正在打印未初始化数据的内容。
  • 您也不会检查或关心是否没有传递参数。我的意思是如果 argc 小于 3,size 的值是多少。我会避免使用 VLA。
  • @drescherjm 为了实现的简单性,我假设总是有两个参数,一个是文件名,第二个是 n
  • @xiaocheng int array[size]; 请改用std::vector&lt;int&gt;,以获得可移植的c++代码!

标签: c++ bash terminal output


【解决方案1】:

您确定程序可以读取您的文本文件吗?如果输入文件不存在,程序仍会尝试从不包含任何元素的array 打印argv[2]**2 条目!该程序最终会转储垃圾值。

我也不确定你为什么要调用pow - 为什么不从argv[2] 获取元素数量?

此外,当您可以使用 C++ stringstream 进行转换时,您使用了一些 c 函数 (atoi)。

当我使用您提供的输入运行您的代码时,例如:./a.out file.txt 2,它会按预期打印 4 个数字。当我这样做时:./a.out does_not_exist.txt 2,它会打印 4 个垃圾值并将它们转储到屏幕上。

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2019-03-30
    • 2018-07-24
    • 2020-03-11
    • 1970-01-01
    相关资源
    最近更新 更多