#c #dev-c
#c #dev-c
Вопрос:
Мне нужно указать марку, модель и годы выпуска автомобиля, к которому подходит конкретный продукт. Программа собирается записать файл с текстом в нем, который будет наброском html. Мне нужна важная информация, вставленная в правильные места, чтобы быстро иметь возможность добавлять продукты на нашу веб-страницу. Когда я использую оператор switch или операторы if для разделения категорий продуктов, входные данные перепутываются и не позволяют мне ответить на один из вопросов. Я не могу просто использовать cin, потому что мне нужно брать даты, которые выглядят как «2008 — 2009 — 2010 — 2011».
Вот что у меня получилось на данный момент! Это обычный, cin
я пробовал getline
, вы могли бы быстро c я начал вчера, и я довольно новичок, так что простите меня, если это легко исправить, но я ничего не могу найти.
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void proinfo();
int main()
{
//Sytem Information
system("TITLE This is a Beta of My Product Information Template Version 0.0.2");
//I'm using this as a welcome screen to inform users of new improvements on patches and other pertinent information to the users
cout << "Welcome To My Product Information Template Maker!!! n It Is Still In Development" << endl;
cout << "nnworking features are:" << endl << "t-Nonen" << endl;
system("PAUSE");
system("CLS");
proinfo();
}
void proinfo()
{
//Declare Variables here
int loop(1), protype;
char make[256], model[256], year[256];
string getinput;
while(loop==1)
{
//This is the first menu the user sees where they have to choose what type
//of products users will be adding
system("CLS");
cout << "Welcome to My Product Information Template Version 0.0.0" << endl;
cout << "Please select the number of the product" << endl;
cout << "type you will be ading!n" << endl;
cout << "1.Fe - Fe2 Moldings" << endl;
cout << "2.CF - CF2 Moldings" << endl;
cout << "What would you like to do? ";
cin >> protype;
if(protype==1)
{
//FE - FE2 Molding
system("cls");
cout << "You have selected" << endl;
cout << "Fe - Fe2 Moldingsn" << endl;
cout << "Please Enter the Make of the molding" << endl;
cin >> make;
cout << "Please Enter the Model of the molding" << endl;
cin >> model;
cout << "Please Enter the Years this molding fits" << endl;
cin >> year;
cout << "You have just created a template for a(n)" << year << " " << make << " " << model << endl;
cout << "Check My Documents For a file called Fe-Fe2template.txt" << endl;
//Asks to quit or restart
cout << "Would you like to make another tempalte?" << endl;
cin >> getinput;
if(getinput=="yes")
{
cout << "Great, Lets keep working!" << endl;
//End of If statement
}
system("PAUSE");
}
if(protype==2)
{
//CF - CF2 Molding
system("cls");
//Asks to quit or restart
cout << "Would you like to make another tempalte?" << endl;
cin >> getinput;
if(getinput=="yes")
{
cout << "Great, Lets keep working!" << endl;
//End of If statement
}
system("PAUSE");
//End of Protype Switch Statement
}
//End of while loop
}
//End of Proinfo()
}
Комментарии:
1. Итак, в чем конкретно заключается ваш вопрос? Что делает программа, отличающаяся от того, что вы хотите, чтобы она делала?
2. Можете ли вы предоставить пример ввода и какой возможный результат / поведение вы ожидаете? Кроме того, ваша программа вошла бы в бесконечный цикл, у вас нет надлежащего выхода из
while(1)
цикла.3. Отбросьте DevC — он больше не разрабатывается, и многие сказали бы, что его вообще не следовало разрабатывать в первую очередь. Переключитесь на Code::Blocks.
Ответ №1:
Измените year[256] на строку year;
Измените cin >> year; на getline(cin, год);
Добавьте строку cin.ignore(); перед getline.
Ваша основная проблема в том, что оператор stream >> оставляет новую строку в потоке, поэтому, когда вы пытаетесь использовать getline, он считывает пустую строку. ignore() переработает новую строку и позволит вам прочитать ожидаемую строку.
Итак, это должно помочь вам в вашем пути.
cin.ignore();
cout << "Please Enter the Years this molding fits" << endl;
getline(cin, year);
У вас есть некоторые другие небольшие проблемы, но вы с ними разберетесь. Худшее — это забыть завершить цикл.
if(getinput=="yes")
{
cout << "Great, Lets keep working!" << endl;
//End of If statement
}
else
{
loop = 0;
continue;
}
Комментарии:
1. Спасибо всем за помощь, я собираюсь попробовать. Извините, что спрашиваю это, если это глупо, но почему вы должны завершать цикл? Обычно я бы просто всегда выбирал yes во время экспериментов, а затем завершал с x, поэтому я не видел необходимости. Вызываю ли я утечки памяти, делая это таким образом.
2. Я не уверен, что вы подразумеваете под выходом с помощью x — закрыть окно терминала?
3. Да, я не знаю технического термина, я просто использую x в правом верхнем углу окна.
4. Да, это не способ правильно завершить программу. Он посылает сигнал для завершения работы вашего pgm, и если вы не обработаете его должным образом, он не сохранит данные и т.д. упорядоченным образом. Поместите exit в цикл и сделайте это правильно.