C ++ visual studio,txt文件中的i / o

时间:2013-11-03 18:37:44

标签: c++ visual-studio-2012

请你帮我完成这项任务。

我应该创建一个包含三个学生的ID和标记的txt文件,输出应该是ID和另一个txt文件中的消息。

当我尝试运行代码时,输​​出txt文件为空。 我尝试更改代码,以便程序在屏幕上输出结果,但由于某种原因它不会读取第一行并重复第三行!

我正在使用Visual Studio 2012。

输入数据:

20112233    90
20115566    80
20113756    70

这是我的代码:

#include <iostream>
#include <fstream>
using namespace std;
void main ()
{

    int ID, mark, c=1;

    ifstream fin;
    fin.open ("marks.txt");
    fin >> ID >> mark;

    ofstream fout;
    fout.open ("grades");

    while (c<=3)
    {   

    fin >> ID >> mark;

    if (mark >= 90 && mark <= 100) {
            fout << ID << "\t" << "Excellent" << endl;
    c++;
    }
    else if (mark >= 80 && mark <= 89) {
            fout << ID << "\t" << "Very Good" << endl;
        c++;
    }

    else if (mark >= 70 && mark <= 79) {
            fout << ID << "\t" << "Good" << endl;
    c++;
    }

        else  if (mark >= 60 && mark <= 69) {
            fout << ID << "\t" << "Accepted" << endl;
        c++;
        }

        else if (mark >= 0 && mark <= 59) {
            fout << ID << "\t" << "Fail" << endl;
        c++;
        }

        else fout << "Wrong data";

    }


    fin.close ();
    fout.close ();

    system ("PAUSE");

}

2 个答案:

答案 0 :(得分:1)

让我们完成以下步骤:

  1. 打开 .txt 文件进行输入:

    std::ifstream fin("marks.txt");
    

    请注意我们如何使用构造函数打开.txt文件而不是使用open。这是在构造中已知路径时打开.txt文件的首选方法。

  2. 打开 .txt 文件输出:

    std::ofstream fout("grade");
    
  3. 创建要从输入txt文件中提取其值的变量。这将是ID和等级:

    int ID, mark;
    
  4. 现在,从txt文件中提取值非常简单。如果要提取txt文件中每行的值,则无需设置计数器 - 当提取到EOF字符(文件结尾)时,提取将停止。

    提取的惯用方法是使用循环的条件表达式执行提取,以便它可以返回流,因此可以评估有效的文件条件。这是通过IOStreams中的格式化和未格式化的I / O运算符自动完成的:

    while (fin >> ID >> mark)
    {
        // ...
    }
    
  5. 关闭文件:这是通过销毁流类本身自动完成的。如果您不再使用这些文件,只要让它们在超出范围或程序结束时自行关闭。含义不要调用close()

答案 1 :(得分:1)

首先main函数必须返回int

其次,您似乎从流中执行读取并将其丢弃。

fin >> ID >> mark; // Read tokens and clear them from the stream.

第三,您不会检查您是否以及从流中读取了什么。

while (c<=3)
{   

fin >> ID >> mark; // What if this fails?

尝试这样的事情:

#include <fstream>

int main () {
    std::ifstream fin("marks.txt");
    std::ofstream fout("grades");

    int id, mark;
    while (fin >> id >> mark) { // Loop while tokens can be read successfully
        if (mark >= 90 && mark <= 100) {
            fout << id << "\tExcellent" << std::endl;
        } else if (mark >= 80 && mark <= 89) {
            fout << id << "\tVery Good" << std::endl;
        } else if (mark >= 70 && mark <= 79) {
            fout << id << "\tGood" << std::endl;
        } /* ... */
    }
}