检查输入文件是否有错误

时间:2014-02-22 05:41:59

标签: c++ arrays file-io char

我编写了这段代码来打开一个文件并将所有内容存储到一个全局字符串数组[800]

void readfile(char usrinput[]) // opens text file
{
    char temp;
    ifstream myfile (usrinput);
    int il = 0;
    if (myfile.is_open())
    {
      while (!myfile.eof())
      {
        temp = myfile.get();
        if (myfile.eof())
        {
          break;
        }
        team[il] = temp;
        il++;
      }
      myfile.close
    }       
    else
    {
      cout << "Unable to open file. (Either the file does not exist or is formmated incorrectly)" << endl;
      exit (EXIT_FAILURE);
    }
    cout << endl;
}

用户需要创建一个格式化的输入文件,其中第一列是名称,第二列是double,第三列也是double。像这样:

Trojans, 0.60, 0.10
Bruins, 0.20, 0.30
Bears, 0.10, 0.10
Trees, 0.10, 0.10
Ducks, 0.10, 0.10
Beavers, 0.30, 0.10
Huskies, 0.20, 0.40
Cougars, 0.10, 0.90

我想在当前添加支票,如果用户只输入7个团队,退出计划,或者用户输入超过8个团队,或者是双号。

我尝试使用计数器创建一个if语句(计数器!= 8,你打破了循环/程序)在另一个函数中,我把它分成三个不同的数组但是没有用。我现在正试图在这个功能中完成这个检查,如果有可能有人可以引导我朝着正确的方向前进?我感谢所有的帮助,如果我能提供更多信息以使事情变得不那么模糊,请告诉我。

编辑:我们不允许使用向量或字符串

1 个答案:

答案 0 :(得分:0)

我建议切换到矢量而不是数组,并使用getline一次获取一行。另外,我不确定你是如何从代码中的文件中返回数据的。

伪代码:

void readfile(char usrinput[], std::vector<string>& lines) // opens text file
{
    ifstream myfile (usrinput);
    if (!myfile.good()) {
      cout << "Unable to open file. (Either the file does not exist or is formmated incorrectly)" << endl;
      exit (EXIT_FAILURE);
    }

    std::string line;
    while (myfile.good()) {
      getline(myfile, line);
      lines.push_back(line);
    }
    myfile.close();

    // it would be safer to use a counter in the loop, but this is probably ok
    if (lines.size() != 8) {
      cout << "You need to enter exactly 8 teams in the file, with no blank lines" << endl;
      exit(1);
    }
}

这样称呼:

std::vector<string> lines;
char usrinput[] = "path/to/file.txt";
readfile(usrinput, lines);

// lines contains the text from the file, one element per line

另外,请检查一下:How can I read and parse CSV files in C++?