Я пишу небольшую программу для моего личного использования, чтобы практиковать изучение C++ и его функциональность, генератор цитат MLA (я пишу большую газету с десятками цитат).Каковы правила объекта std :: cin в C++?
Из-за отсутствия лучшего способа сделать это (я не понимаю классы или другие файлы .cpp внутри вашего основного, так что не беспокойтесь, расскажите мне, я буду работать над этим, когда у меня будет больше времени) , Я пишу функцию для каждого типа цитат. Я могу разбить это на функцию для каждого повторно используемого кода, если у меня будет больше времени.
Мой вопрос: как работает объект std :: cin? В настоящее время я читаю std :: cin >> для строк, которые я ожидаю как отдельные слова, и getline (std :: cin, string) для строк с пробелами. Тем не менее, я не получаю правильный результат. Я просто хочу знать, как работает std :: cin и почему я неожиданно пропускаю некоторые входы (например, он пропускает веб-страницу вместо того, чтобы дать мне возможность ввести в нее).
void webCit()
{
std::cout << "Leave any unknowns blank.\n";
std::cout << "Author last name: ";
std::string lastName;
std::cin >> lastName;
if (lastName.size() != 0)
{
lastName = lastName + ", ";
}
std::cout << "Author first name: ";
std::string firstName;
std::cin >> firstName;
if (firstName.size() != 0)
{
firstName = firstName + ". ";
}
std::cout << "Article title: ";
std::string articleTitle;
getline(std::cin, articleTitle);
if (articleTitle.size() != 0)
{
articleTitle = "\"" + articleTitle + ".\" ";
}
std::cout << "Title of web page: ";
std::string pageTitle;
std::cin >> pageTitle;
if(pageTitle.size() != 0)
{
pageTitle = pageTitle + ". ";
}
std::cout << "Publication date: ";
std::string publicationDate;
getline(std::cin, publicationDate);
if(publicationDate.size() != 0)
{
publicationDate = publicationDate + ". ";
}
std::cout << "Web address: ";
std::string webAddress;
getline(std::cin, webAddress);
webAddress = "<" + webAddress + ">. ";
std::cout << "Date accessed: ";
std::string dateAccessed;
getline(std::cin, dateAccessed);
if(dateAccessed.size() != 0)
{
dateAccessed = dateAccessed + ". ";
}
std::string citation =
lastName + firstName + articleTitle + pageTitle + publicationDate + webAddress + dateAccessed;
std::cout << citation; //TEST; remove after
}
EDIT: I/O
Leave any unknowns blank.
Author last name: Hooked
Author first name: Jerbear
Article title: Title of web page: title
Publication date: Web address: www.win.com
Date accessed: 4/29/09
Hooked, Jerbear. Title. <www.win.com>. 4/29/09.
Как вы можете видеть, что-то происходит не так, потому что мой вход становится пропускаются.
Я не вижу очевидных проблем с тем, как вы это делаете ... Можете ли вы скопировать и вставить свое взаимодействие с помощью t его программу, точные входы и выходы, которые у вас есть? Кроме того, я бы рекомендовал поставить «using namespace std;» наверху (обычно сразу после всех ваших # include), чтобы вы могли просто сказать «cin» и «cout», не записывая std :: снова и снова. Но вам, конечно, не обязательно ... в любом случае. – MatrixFrog
Я добавил несколько ввода-вывода. – jkeys
@MatrixFrog: Я предпочитаю использовать 'std :: cin; используя std :: cout; ... 'или помещать' using namespace std; 'внутри функций, которые его используют, а не на глобальном уровне. –