Как я могу заставить свой текстовый файл идти по той же строке, читая разные входные данные

#c

#c

Вопрос:

Мне нужно, чтобы мой вывод выглядел так.

 Applicant #: 1
School = L GPA = 4.0 math = 600 verbal = 650 alumnus = N
Applying to Liberal Arts
Accepted to Liberal Arts!!!
  

Но когда я запускаю код, он просто помещает входные данные в каждое отдельное место, не переходя к текстовому файлу.

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

int main()
{
    // Open both input and output
    ifstream input;
    input.open("MP2input.txt.");
    ofstream output;
    output.open("MP2output.txt");

    // containers for any variables
    double app = 0;
    string pass;

    if(!input.fail())
    {
        do(input >> pass)
        {
            app  ;
            output << "Application #" << app << endl;
             output << "School = " << pass <<  " GPA = "  << pass << " Math = " << pass << " Verbal = " << pass << " Alumnus = " << pass << endl;
        }
    }
    input.close();
    output.close();
}
  

Входные данные должны выглядеть следующим образом

 L 4.0 600 650 N
M 3.9 610 520 N
L 3.8 590 600 N
  

Вывод выглядит так

 Application #1
School = L GPA = L Math = L Verbal = L Alumnus = L
Application #2
School = 4.0 GPA = 4.0 Math = 4.0 Verbal = 4.0 Alumnus = 4.0
Application #3
School = 600 GPA = 600 Math = 600 Verbal = 600 Alumnus = 600
Application #4
  

Ответ №1:

Здесь:

    do(input >> pass)
   {
       app  ;
       output << "Application #" << app << endl;
        output << "School = " << pass <<  " GPA = "  << pass << " Math = " << pass << " Verbal = " << pass << " Alumnus = " << pass << endl;
   }
  

Вы считываете одну строку из файла, а затем печатаете ее несколько раз. input >> pass читает одно слово, пока не встретит символ пробела. Неясно, как вы ожидаете output << "School = " << pass << " GPA = " << pass ... печатать разные записи из файла. Также у вас есть do без while .

Если вы хотите прочитать несколько слов из файла, который вам скорее нужен:

 std::string school;
std::string GPA; 
// ... others ...
while(input >> school >> GPA) {
    app  ;
    output << "Application #" << app << endl;
    output << "School = " << school <<  " GPA = "  << GPA << endl;
    // ... others ...
}
  

Комментарии:

1. Это сделало свое дело. Большое вам спасибо. Я новичок в кодировании и новичок в переполнении стека.

Ответ №2:

Если вы уверены, что ваш входной файл правильно отформатирован, просто обновляйте pass из ввода каждый раз.

 
int main()
{
   // Open both input and output
   ifstream input;
   input.open("MP2input.txt.");
   ofstream output;
   output.open("MP2output.txt");

   // containers for any variables
   double app = 0;
   string pass;

   if(!input.fail())
   {
       do(input >> pass)
       {
           app  ;
           output << "Application #" << app << endl;
           output << "School = " << pass;
           input >> pass;
           output <<  " GPA = "  << pass;
           input >> pass;
           output << " Math = " << pass;
           input >> pass;
           output << " Verbal = " << pass;
           input >> pass;
           output << " Alumnus = " << pass << endl;
       }
   }
   input.close();
   output.close();
}
  

Лучше быть немного более надежным и проверять input.fail() каждый раз, но это много ввода;-)