2013-11-10 4 views
-3

В настоящее время я не понимаю, почему моя программа не выполняется так, как должно быть. Всякий раз, когда я запускаю его, он выполняет только первый оператор cout & и полностью обходит второй. Программе необходимо задать два имени и сохранить их в строковых объектах.C++: String Сравнить

Затем следует сообщить, независимо от того, являются ли они или нет, если они игнорируют случай, то они одинаковы (как при тестировании, если имя «гнездо» совпадает с «ДЖЕКС», и оно покажет, что имена одинаковы, игнорируя различия в нижняя/верхняя буква.) Вопрос дал два необходимых заголовка для программы, так что вы увидите заголовки bool и string у новичка.

Вот мой текущий код: http://pastebin.com/Ju0MjkfP

#include <iostream> 
using namespace std; 

string upperCaseIt(string s); 
bool sameString (string s1, string s2); 

int main() 
{ 
    char name1, name2; 

    cout << "Enter a name: "; 
    cin >> name1; 

    cout << "Enter another name and I will test if they are the same."; 
    cin >> name2; 

    if (name1==name2) 
     cout << name1 << " is the same as " << name2 << endl; 

    if (name1!=name2) 
     cout << name1 << " is not the same as " << name2 << endl; 

    system ("pause"); 
    return 0; 
} 
bool sameString (char name1) 
{ 
    if (name1) 
     return true; 
    else 
     return false; 
} 

Edit: я введен "гнездо" и "домкрат", чтобы проверить его.

Любые подсказки будут оценены по достоинству; Благодарю.

+0

примечание для будущих вопросов: просьба указать тестовый ввод, который вы дали своей программе, полученный им результат и то, что вы ожидали от него – codeling

ответ

3

При объявлении

char name1, name2; 

вы объявляете два односимвольные переменные. Если вы хотите строку, которую вы должны использовать std::string:

std::string name1, name2; 
3

Вы должны использовать std::string, не char. char переменная будет содержать только один одиночный символ (например, 'A', но не полное имя, как "Альфред".

Так что вы должны сделать

std::string name1, name2; 

вместо

char name1, name2; 

Кроме того, ваш sameString пока не выглядит полным, он проверяет, не является ли ваша переменная name1! = 0

2

Чтобы уточнить e на других правильных ответах, причина, по которой он «пропускает» второй cin, заключается в том, что вход буферизуется. Когда он запрашивает имя, вы вводите несколько символов (например, Майк). Следующая строка вызывает метод operator>> на cin для хранения введенных данных. Если вы указали name1 как std::string, он будет читать символ новой строки, сохраните строку «Mike» в переменной и отмените новую строку. В этот момент все символы, которые вы набрали, будут прочитаны, поэтому в буфере ничего не осталось.

Однако вы указали name1 как номер char - символ. Поэтому, когда C++ выполняет вызов cin >> name1, он по праву понимает, что он может хранить только одну букву, так что это все, что она читает. Это означает, что name1 - это только «М», и до сих пор осталось еще что-то, что еще не было прочитано. В этом случае «ike». Поэтому в следующий раз, когда ему нужно что-то прочитать, вам не нужно ждать, когда вы наберете что-нибудь еще. Он просто продолжает чтение из буфера, который вы уже заполнили.

Смежные вопросы