Это мой первый опыт использования stackoverflow. Мне не удалось найти нужную мне информацию о getline. Я учусь в классе простого программирования для инженерных переводов, поэтому код, который мы пишем, довольно прост. Все, что я пытаюсь здесь сделать, это поместить заданное пользователем количество вопросов и ответов в два разных массива. Мой цикл while выглядит так (я использовал цикл for, но переключился на while, просто чтобы посмотреть, перестанет ли он ломаться):
int main ()
{
srand((unsigned)time(0));
string quest1[100], answ1[100];
int size1, x = 0, num, count1, visit[100], shuffle[100];
fstream flashcard1;
cout << "flashcard.cpp by NAME\n" << endl;
cout << "This program allows user to manipulate questions and answers for studying.\n" << endl;
cout << "\nHow many flash cards will be entered(MAX 100)? ";
cin >> size1;
cout << endl;
while(x < size1)
{
cout << "Enter Question: ";
getline(cin , quest1[x]);
cout << endl;
x = x++;
/*
cout << "Enter Answer: " << endl;
getline(cin,answ1[x]);
cout << endl;
flashcard1.open("flashcard1.dat", ios::app);
flashcard1 << quest1[x] << " " << answ1[x] << endl;
flashcard1.close();
cout << "Data Stored." << endl;
*/
}
}
Я отметил часть ввода ответа, а также сохранение данных в файл только для отладки. Когда я запускаю программу, она пропускает getline для первого вопроса, отображает второй цикл «Введите вопрос», а getline работает для остальных. Итак, если у меня есть size1 из 5, программа заполняет только позиции массива 1-4. Пожалуйста помоги. Это простая программа для карточек, которая будет делать то же самое, как если бы вы создавали карточки для изучения и перемешивания их.
x = x++;
— это неопределенное поведение. Это должно быть простоx++
(или++x
, илиx += 1
, илиx = x + 1
, илиx -= -1
....) - person Seth Carnegie   schedule 23.11.2011endl
, когда вы имеете в виду'\n'
.std::cout << std::endl
в точности эквивалентноstd::cout << '\n' << std::flush
. 2) Никогда не говорите использование пространства имен std;, даже если (особенно если) ваша книга или профессор говорят вам об этом. Импорт всего пространства именstd
в вашу программу создает трудно идентифицируемые ошибки. - person Robᵩ   schedule 24.11.2011using namespace std;
. Пока вы знаете, в чем опасность, вы можете делать это в очень контролируемых средах (например, в коротких программах с одним файлом). - person Seth Carnegie   schedule 24.11.2011