#c #variables #input #cin
#c #переменные #ввод #cin
Вопрос:
Я только недавно начал C , и теперь я столкнулся с проблемой в очень простой программе. Я успешно ввел part_num и part_des (оба типа string), но программа пропустила part_price и part_quant (тип int). Я не смог ввести значения для этих двух последних переменных.Как мне решить эту проблему? Спасибо
#include <iostream>
using namespace std;
int main()
{
string part_num;
string part_des;
int part_price;
int part_quant;
cout<<"Please enter the part number: ";
cin>>part_num;
cout<<"n"<<endl;
cout<<"Please enter the part description: ";
cin>>part_des;
cout<<"n"<<endl;
cout<<"Please enter the part price: ";
cin>>part_price;
cout<<"n"<<endl;
cout<<"Please enter the part quantity: ";
cin>>part_quant;
cout<<"n"<<endl;
}
Комментарии:
1. Какую ошибку вы получаете?
2. Ошибки нет, выполнение просто не позволило мне ввести значение цены и количества
3. Какой компилятор / IDE вы используете?
4. Вы перекомпилировали программу, верно?
5. Я обнаружил, что проблема возникает только тогда, когда я добавляю «Красный, алюминиевый» для описания моей части. Если я все еще хочу оставить описание таким образом, как мне решить проблему?
Ответ №1:
Что происходит
Пожалуйста, проверьте сами:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string my_string;
cout << "enter a string: ";
cin >> my_string;
cout << "you have entered: " << my_string << endl;
system("pause");
}
Результаты:
enter a string: one
you have entered: one
Press any key to continue . . .
enter a string: one two
you have entered: one
Press any key to continue . . .
Где «два»? Оно остается в потоке. Когда вы пытаетесь получить число после этого, этот фрагмент текста автоматически принимается в качестве вашего ввода, возможно, он вызывает исключение, и ваша программа внезапно завершается.
Как исправить
Используйте что-то вроде getline
.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string my_string;
cout << "enter a string: ";
getline (cin, my_string);
cout << "you have entered: " << my_string << endl;
system("pause");
}
Это устранит проблему, с которой вы столкнулись.
enter a string: one two
you have entered: one two
Press any key to continue . . .
Ответ №2:
Код работает нормально. (если у вас там нет пробелов)
#include <iostream>
using namespace std;
int main()
{
string part_num;
string part_des;
int part_price;
int part_quant;
cout<<"Please enter the part number: ";
cin>>part_num;
cout<<"n" << part_num <<endl;
cout<<"Please enter the part description: ";
cin>>part_des;
cout<<"n" << part_des <<endl;
cout<<"Please enter the part price: ";
cin>>part_price;
cout<<"n" << part_price <<endl;
cout<<"Please enter the part quantity: ";
cin>>part_quant;
cout<<"n" << part_quant <<endl;
}
Просто сразу же выдайте себе результат. Чтобы увидеть, чего вам не хватало.
Исправлено для пробелов и прочего:
int main()
{
string part_num;
string part_des;
int part_price;
int part_quant;
cout<<"Please enter the part number: ";
getline( cin , part_num );
cout << "n" << part_num <<endl;
cout<<"Please enter the part description: ";
getline( cin , part_des );
cout<< "n" << part_des <<endl;
cout<<"Please enter the part price: ";
cin >> part_price;
cout << "n" << part_price <<endl;
cout << "Please enter the part quantity: ";
cin >> part_quant;
cout << "n" << part_quant <<endl;
}
Также подумайте об использовании строк для цены и количества, а затем преобразуйте их в целое число, если вы хотите продолжать использовать getline.
Комментарии:
1. Я обнаружил, что проблема возникает, когда я добавляю «Красный, алюминиевый» для описания моей части. Если я все еще хочу оставить описание таким образом, как мне решить проблему?
Ответ №3:
Попробуйте это, это должно сработать:
#include <iostream>
using namespace std;
int main ()
{
int i;
cout << "Please enter an integer value: ";
cin >> i;
cout << "The value you entered is " << i;
cout << " and its double is " << i*2 << ".n";
return 0;
}
Комментарии:
1. Это, очевидно, работает, но не имеет ничего общего с проблемой операционной системы.
2. Я рад, что смог помочь 😉