【问题标题】:Cannot open input file无法打开输入文件
【发布时间】:2015-07-27 20:41:48
【问题描述】:

我正在编写一个基本程序,它将从文本文件中读取整数列表并将文件中的最小整数和最大整数输出到屏幕。 我确保文本文件与源代码文件在同一个文件夹中,并且文件的名称与我在代码中的名称相同。无论如何,程序都无法打开文件。我该如何解决这个问题?

这是我的程序:

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

int main()
{
    ifstream inStream;

    inStream.open("infile.txt");
    if (inStream.fail())
    {
        cout<<"Input file opening failed.\n";
        system("pause");
        exit(1);
    }

    int arr[100], i = 0;

    while(!inStream.eof())
    {
        inStream>>arr[i++];
    }

    int min = arr[0];

    for (int index = 1; index <= i; index++)
    {
        if (arr[index] < min)
        {
            min = arr[index];
        }
    }

    int max = arr[0];

    for (int index = 1; index <= i; index++)
    {
        if (arr[index] > max)
        {
            max = arr[index];
        }
    }

    cout<<"The smallest number is "<<min<<endl;
    cout<<"The largest number is "<<max<<endl;

    inStream.close();

    system("pause");
    return 0;
}

【问题讨论】:

  • 请注意,您的程序还存在其他严重问题:带有!eof 前置条件的循环。它通常会导致您的程序“读取”比文件中实际存在的值更多的值(一个)。不要使用!eof 作为前提条件。最重要的是,您的循环迭代直到index &lt;= i(而不是index &lt; i),这也将尝试访问数组中不存在的数据。
  • 与其使用数组,不如保留两个变量:最小和最大。如果读取的整数较小,则变为最小;如果整数大于最大的,它就变成最大的。无需存储所有值。
  • @ThomasMatthews 我不明白如果不将文件中的所有数字存储在一个数组中以便使用它们并输出结果,如何做到这一点。你能解释更多吗?
  • smallest 设置为MAX_INT。将largest 设置为MIN_INT。循环:从文件中读取值。 if (value &lt; smallest) smallest = value; if (value &gt; largest) largest = value;。结束循环。 MAX_INTMIN_INTlimits.h 中定义,可以命名为 INT_MAXINT_MIN
  • @ThomasMatthews 什么是limits.h?我认为这可能超出了我在课堂上所学的内容或我教科书中的任何内容。有没有更简单的方法来设置最大值和最小值?

标签: c++ oop file-io io


【解决方案1】:

如果您尝试打开“C:\SomeDirectory\infile.txt”,那将是一个绝对路径。这与称为相对路径的“infile.txt”相反。这就引出了一个问题,“它相对于哪里?”。它与“当前工作目录”或 CWD 相关。通常,CWD 设置为可执行文件所在的位置,但并非必须如此!实际上,如果您将文件拖放到可执行文件上,CWD 将是您从中拖动文件的位置。或者,如果您从 Visual Studio 运行并从 IDE 内部启动代码(通过点击按钮或使用 F5),则 CWD 将不在可执行文件所在的位置。

简短的回答是您通常希望使用绝对路径。绝对存在相对路径有意义的情况,但您确实必须了解您的程序是如何使用的以及 CWD 在哪里才能使之有用。对于您的情况,我会坚持使用绝对路径。

【讨论】:

  • “简短的回答是您通常希望使用绝对路径。” - 不好的建议!当您在一个团队中处理具有外部依赖关系的项目时,您不一定知道它们在所有其他团队成员的计算机上的确切位置。与使用绝对路径相比,确定该资源相对于当前工作目录的位置可能更容易。或者,您可以使用环境路径变量(最好是 Windows 自带的)来定位资源。
猜你喜欢
  • 2021-07-16
  • 2014-01-13
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多