2013-05-04 2 views
0

В настоящее время пытается написать программу, которая попросит пользователя ввести их для строки, а затем прочесть эти значения через итератор. Последним шагом для этой программы было бы применить простой кесаревый сдвиг к сообщению, прежде чем отображать его обратно пользователю. Однако, поскольку я, кажется, сделал ошибку, которая заставляет программу пропустить цикл «for» (или какой бы ни был цикл, который я использую, я пробовал все: от «for» до «while» до «if, else»). Я относительно новичок в C++, поэтому я надеюсь, что я просто настроил свой цикл неправильно, несмотря на все мои усилия.C++: Чтение элементов из вектора, петли пропускаются через

#include <iostream> 
#include <vector> 
#include <string> 

int main() { 
    std::vector <std::string> vector_1; 
    int c; 
    int d = 0; 
    int i = 0; 
    std::string message; 
    std::vector<std::string>::iterator it_1; 

    std::cout << "Please input the message to be Caesar Shifted \n"; 

    while (std::cin >> message, d != 0) { 
     vector_1.push_back (message); 
     ++d; 
    } 

    std::cout << "Encrypted message is"; 

    for (std::vector<std::string>::iterator it_1 = vector_1.begin(); it_1 != vector_1.end(); ++it_1) { 

    std::cout << *it_1; 
    } 

return 0; 
} 

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

+0

d = 0; (std :: cin >> message, d! = 0) всегда будет ложным (и не войдет в цикл while). Что вы пытались сделать здесь с d? – selalerer

+0

Целью было установить триггер, где цикл while завершится нажатием клавиши «enter», хотя после того, как вы вернулись с ответом nullptr, я вижу, что проблема лежала в первом цикле, а не во втором. –

ответ

0
it_1 < vector_1.end() 

должен быть

it_1 != vector_1.end() 

и

while (std::cin >> message, d != 0) { 
    vector_1.push_back (message); 
    ++d; 
} 

должен быть

getline(std::cin, message); 
std::stringstream ss(message); 
std::string temp; 
while (ss >> temp) 
    vector_1.push_back(temp); 

Вы хотите #include <sstream> в верхней части для этой работы.

+0

Исходное намерение заключалось в том, что программа перестала принимать входные данные при нажатии клавиши ввода, хотя концепция одинаков. –

+0

@ScottHowland Я обновил свой ответ – nullptr

+0

Большое спасибо, nullptr. Приносим извинения, если мой вопрос был расплывчатым, но немного привык к этому сайту. Тем не менее, я рад, что смог узнать кое-что о струне в процессе сортировки этого беспорядка. –