Не удалось ввести значение много раз

#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;
}
  

http://ideone.com/U31pb9

Просто сразу же выдайте себе результат. Чтобы увидеть, чего вам не хватало.

Исправлено для пробелов и прочего:

 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. Я рад, что смог помочь 😉