Do ... Пока () цикл не работает нормально - PullRequest
0 голосов
/ 16 марта 2012

Я предлагаю пользователю ввести данные об автомобилях.Используемый мной цикл Do ... while () в первый раз работает нормально, а после первого не работает должным образом.Код ниже, и я использую Dev-C ++.Спасибо за вашу помощь и время.

#include <iostream>
#include<conio.h>
#include<cstring>
#include<fstream>
#include <iomanip.h>


using namespace std;

int main()
{

  char manufacturer[16], model[16], year[10], miles[10], car_cost[12];
  char response;
  ofstream OS ("usedcars.txt", ios::out);
  cout<<"for each car please enter :"<<endl;

  do
  {
    ofstream OS ("usedcars.txt", ios::app);
    cout<<"The manufacturer: ";
    cin.getline(manufacturer, 16);
    cout<<"The model: ";
    cin.getline(model, 16);
    cout<<"The year: ";
    cin.getline(year, 8);
    cout<<"The miles: ";
    cin.getline(miles, 8);
    cout<<"The cost of car $: ";
    cin.getline(car_cost, 10);

   OS << manufacturer << setw(9) << model << setw(8) << year << setw(11)<< miles << setw(8) << car_cost << endl;
  cout<<"Do you want to continue?";
  cin>>response;

 }
 while (response!='n');  


  return 0;  
}

******* результат программы ********

for each car please enter :
The manufacturer: Toyota
The model: corolla
The year: 2005
The miles: 123,000
The cost of car $: 7,999
Do you want to continue?y
The manufacturer: The model: Honda
The year: Civic
The miles: 67,850
The cost of car $: 9,200
Do you want to continue?n

*** usedcars.txt **************

Toyota  corolla    2005    123,000   7,999
    Honda   Civic     67,850   9,200

Ответы [ 2 ]

6 голосов
/ 16 марта 2012

Я полагаю, вы нажимаете ввод после ввода 'y' для ответа. Но вы читаете только в одном символе, который у. Таким образом, '\ n' передается следующему чтению, которое является вашим производителем. Таким образом, там нет данных.

Как пишет stefaanv, используйте cin.ignore. Интересный момент об этом можно найти здесь: Очистка ввода cin: разве cin.ignore не является хорошим способом?

1 голос
/ 16 марта 2012

цикл do while кажется нормальным.Обновите свой вопрос с ошибками или ошибками, с которыми вы столкнулись.единственная проблема, о которой я могу думать из кода, состоит в том, что поток не закрыт после итерации.Вы должны закрыть поток, когда пользователь response равен n

...