2015-10-15 2 views
0

Моих текущих проектов предполагают, чтобы получить пользовательский ввод для участников (целых) и новых участников (целых), определяют массив для отдельных входов (участников и участников), затем прокрутите код, указав имя участника или нового участника. Хотя в моем первом for-loop (И во-вторых, если бы мой код дошел до него), он начинается с запроса «Name # 1:», после чего вход начинает очень плохо работать и выходит из программы. Я думаю, что проблема в указателях, но вот мой код:для цикла с определенным пользователем массива - C++

#include<iostream> 

using namespace std; 

int main() 

{ 

int dV = 1; 

int students; 
int newStud; 

cout << "Enter number of participants : "; 
cin >> students; 
system("CLS"); 

cout << "Please enter the number of new participants: "; 
cin >> newStud; 
system("CLS"); 

while(newStud > students) 
{ 
    cout << "You entered a number greater than the overall participants!" << endl << endl; 
    cout << "Please enter the number of new participants: "; 
    cin >> newStud; 
    system("CLS"); 
} 

int *pointer1 = new int[students]; //Pointer to an array of size students(Variable) 
int *pointer2 = new int[newStud]; //Pointer to an array of size newStud(Variable) 


for (int i = 0; i < students; i++) 
{ 
    cout << "Name #" << dV << ": "; 
    cin >> pointer1[i]; //ERROR HERE: After first input, program text blinks a few times then exits  
    system("PAUSE"); //Used for debugging 
    system("CLS"); 
    dV++; 
} 

for (int i = 0; i < newStud; i++) 
{ 
    cout << "New name #" << dV << ": "; 
    cin >> pointer2[i]; 
    system("CLS"); 
    dV++; 

} 
return 0; 
} 

ответ

1

Если все ваши ученики не являются секретными агентами или живут в мире THX-1138, у них есть имена, а не числа. Измените тип, в котором хранятся имена.

Проблема, которую вы видите, заключается в том, что вы хотите прочитать целое число от cin, но вы даете ему текст. Это устанавливает бит ошибки в потоке, поэтому все последующие входы после этого будут терпеть неудачу, пока не будут сброшены.

0

Прежде всего, использование

cin >> variable 

не рекомендуется использовать в C++. Гораздо лучше использовать getline(); функция. Существует большое описание ее использования здесь:

http://www.cplusplus.com/forum/articles/6046/

Вы должны также напечатанный материал вход, вы получите от GetLine() до целого числа.

+0

Нет ничего плохого в том, что 'cin >> variable' и' getline' читает строки, поэтому я не знаю, как вы планируете «набирать» результат на целое число. – Blastfurnace

+0

Этот код безопасно преобразует строку в номер. cin не считается безопасным и вообще getline(); является предпочтительным способом обработки входных данных. 'stringstream myStream (input); if (myStream >> myNumber) break; cout << "Недопустимый номер, повторите попытку" << endl; } cout << "Вы ввели:" << myNumber << endl << endl; ' –

+1

Использование' std :: stringstream' или другой функции для преобразования из строки в 'int' не является __typecast__. [Вот ссылка на связанном вами сайте.] (Http://www.cplusplus.com/doc/tutorial/typecasting/) – Blastfurnace