C++ 将文件读入数组并输出数组C++; #包括 #包括 #包括 #包括 使用名称空间std; int main() { ifstream inData(“Text.txt”); 流输出数据(“arrayout.txt”); int n=0; int-num; int数组[10]; 而(!inData.eof()) { inData>>数组[n]; n++; } 对于(int a=0;acurrentNumber) { 数字。推回(当前数字); i++; } cout

C++ 将文件读入数组并输出数组C++; #包括 #包括 #包括 #包括 使用名称空间std; int main() { ifstream inData(“Text.txt”); 流输出数据(“arrayout.txt”); int n=0; int-num; int数组[10]; 而(!inData.eof()) { inData>>数组[n]; n++; } 对于(int a=0;acurrentNumber) { 数字。推回(当前数字); i++; } cout,c++,arrays,file,C++,Arrays,File,这个cout数组[n];++n) {} (当然,格式化这样一个循环有多种方法),但退出条件应该是读取失败,并且重要的是不要超出存储的界限。您已经从注释中了解到了这一点 如果您的教授要求您使用POA(普通旧数组)而不是容器(例如),则负责所有边界检查,以将读取的元素限制为不超过声明保留的数组的元素数,并在读取的元素少于容器将保留的元素数的情况下保留读取的元素数的有效索引 基本上,你是在使用C++ + IoSoW填充一个普通的C数组来进行输入处理。对于初学者,不要使用魔法数字,不要硬编码文件名。

这个
cout数组[n];++n)
{}
(当然,格式化这样一个循环有多种方法),但退出条件应该是读取失败,并且重要的是不要超出存储的界限。

您已经从注释中了解到了这一点

如果您的教授要求您使用POA(普通旧数组)而不是容器(例如),则负责所有边界检查,以将读取的元素限制为不超过声明保留的数组的元素数,并在读取的元素少于容器将保留的元素数的情况下保留读取的元素数的有效索引

<>基本上,你是在使用C++ + IoSoW填充一个普通的C数组来进行输入处理。对于初学者,不要使用魔法数字,不要硬编码文件名。
for (n = 0; n < 10 && inData >> array[n]; ++n )
    {}
而接受参数的
main()
的正确原型是
intmain(intargc,char**argv)
(或者
*argv[]
,如果您喜欢等效的指针数组)。您现在可以将要读取的文件名作为第一个参数传递给程序,而不必重新编译代码来读取另一个文件。要将该参数用作要读取的文件名,只需验证命令行上是否提供了足够数量的参数即可(正在运行的程序的名称始终是第一个参数,
argv[0]
,因此第一个用户参数是
argv[1]
),例如

现在,您已经将
ndx
元素读取到数组中,所以您需要做的就是以正向和反向顺序输出它们。您可以通过在反向情况下循环
0i>=0
来实现这一点,例如

    /* protect plain-old array bounds && validate integer input */
    while (ndx < ARRSZ && fin >> array[ndx])
        ndx++;                                  /* increment index on success */
示例使用/输出

$ cat dat/int8.txt
 15815 9999 6607 32552 1479 1769 20868 6058
$ cat dat/int10.txt
19243
31875
3191
11369
22478
1783
25723
835
12093
6888
示例输入文件

或者读取由
'\n'
分隔的整数没有任何区别(
空格
'\t'
'\n'
都是空白):

示例使用/输出

$ cat dat/int8.txt
 15815 9999 6607 32552 1479 1769 20868 6058
$ cat dat/int10.txt
19243
31875
3191
11369
22478
1783
25723
835
12093
6888
仔细检查一下,如果你还有其他问题,请告诉我

  • 您声明了一个大小为10的固定数组,但循环检查的是文件的结尾,而不是数组的结尾。什么是
    n
    呢?只需使用std::vector即可。如果数据文件的大小始终为10,则可能是第二个循环中的键入错误
  • 在第二个循环中输入错误。如果
    n=10,则将
    array[n]
    更改为
    array[a]
    array[n]
    超出边界

  • 在输入文件中,数字是如何分隔的?每行是否有一个数字?或者它们是否都在同一行上,由某个删除字符分隔?请编辑您的问题以澄清这一点。正如旁注:重复的@Drewster301,则您的文件要么未正确打开,要么文件中有10个以上的数字。请说明您是如何操作的已验证文件已打开。如果(!inData)抛出“inData未打开”,则添加
    ;如果(!outData)抛出“outData未打开”,则添加
    int n=0
    之前,查看程序在执行时是否会向您发送错误消息。@walnut,好的,我更改了代码中非常简单的一部分,现在在打印数字的循环中。我只是将for循环中的n改为a。这件事可能会让人非常沮丧。。。
    #include <iostream>
    #include <fstream>
    
    #define ARRSZ 10    /* if you need a constant, #define one (or more) */
    
    int main (int argc, char **argv) {
    
        if (argc < 2) { /* validate at least one argument given for filename */
            std::cerr << "error: insufficient arguments\n"
                         "usage: " << argv[0] << " in-file\n";
            return 1;
        }
    
        int ndx = 0,                                /* index for array */
            array[ARRSZ] = {0};                     /* array */
        std::ifstream fin (argv[1]);                /* input file stream */
    
        /* protect plain-old array bounds && validate integer input */
        while (ndx < ARRSZ && fin >> array[ndx])
            ndx++;                                  /* increment index on success */
    
        std::cout << "forward:\n";
        for (int i = 0; i < ndx; i++)               /* loop outputting each element */
            std::cout << "  array[" << i << "]: " << array[i] << '\n';
    
        std::cout << "\nreverse:\n";
        for (int i = ndx - 1; i >= 0; i--)          /* loop outputting each element */
            std::cout << "  array[" << i << "]: " << array[i] << '\n';
    }
    
    $ cat dat/int8.txt
     15815 9999 6607 32552 1479 1769 20868 6058
    
    $ ./bin/rdpoafile dat/int8space.txt
    forward:
      array[0]: 15815
      array[1]: 9999
      array[2]: 6607
      array[3]: 32552
      array[4]: 1479
      array[5]: 1769
      array[6]: 20868
      array[7]: 6058
    
    reverse:
      array[7]: 6058
      array[6]: 20868
      array[5]: 1769
      array[4]: 1479
      array[3]: 32552
      array[2]: 6607
      array[1]: 9999
      array[0]: 15815
    
    $ cat dat/int10.txt
    19243
    31875
    3191
    11369
    22478
    1783
    25723
    835
    12093
    6888
    
    $ ./bin/rdpoafile dat/int10.txt
    forward:
      array[0]: 19243
      array[1]: 31875
      array[2]: 3191
      array[3]: 11369
      array[4]: 22478
      array[5]: 1783
      array[6]: 25723
      array[7]: 835
      array[8]: 12093
      array[9]: 6888
    
    reverse:
      array[9]: 6888
      array[8]: 12093
      array[7]: 835
      array[6]: 25723
      array[5]: 1783
      array[4]: 22478
      array[3]: 11369
      array[2]: 3191
      array[1]: 31875
      array[0]: 19243