C ++ Если оператор не будет работать - PullRequest
1 голос
/ 11 февраля 2012
//Writing a letter

#include <iostream>
using namespace std;

int main() {
string first_name;      //Name of addressee
string friend_name;     //Name of a friend top be mentioned in the letter
char friend_sex, m, f;  //variable for gender of friend

friend_sex = 0;

cout << "\nEnter the name of the person you want to write to: ";
cin >> first_name;

cout << "Enter the name of a friend: ";
cin >> friend_name;

cout << "Enter friend's sex(m/f): ";    //Enter m or f for friend
cin >> friend_sex;                      //Place m or f into friend_sex

cout << "\nDear " << first_name << ",\n\n"
     << "   How are you? I am fine. I miss you!blahhhhhhhhhhhhhhhh.\n"   
     << "blahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.\n"
     << "Have you seen " << friend_name << " lately? ";

//braces only necessary if there are more than one statement in the if function
if(friend_sex == m) {
    cout << "If you see " << friend_name << ", please ask him to call me.";             
}   //If friend is male, output this
if(friend_sex == f) {
    cout << "If you see " << friend_name << ", please ask her to call me.";
}   //If friend is female, output this

return(0);
}

Вот что на самом деле выходит:

Enter the name of the person you want to write to: MOM

Enter the name of a friend: DAD

Enter friend's sex(m/f): m

Dear MOM, 

        How are you? I am fine. I miss you! blahhhhhhhhhhhhhhhhh.
        blahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.
        Have you seen DAD lately?

Эта программа имитирует короткое письмо. Вывести блок слов достаточно просто, но когда я хочу, чтобы в письме были помещены некоторые условные выражения, у меня проблемы. Несмотря на то, что я ввел friend_sex (m / f), когда программа спрашивает меня, вывод из оператора if не материализуется. Почему?

Ответы [ 6 ]

6 голосов
/ 11 февраля 2012

Вы проверяете friend_sex против неинициализированной символьной переменной m. Вы, вероятно, хотите проверить на буквальное значение 'm'. Это все равно что иметь целочисленную переменную с именем seven и ожидать, что она будет содержать значение 7.

3 голосов
/ 11 февраля 2012

char m, f

Здесь объявляются переменные с именами m и f. Здесь m и f - имя переменной, а не значения «m» и «f». Прямо сейчас они содержат значения мусора.

Вам нужно их инициализировать:

char m = 'm', f = 'f'

Или вы можете поместить константу char непосредственно в оператор if вместо использования переменных m, f

if (friend_sex == 'm') {}

1 голос
/ 11 февраля 2012

Это ваша проблема:

if(friend_sex == m)

Вы сравниваете две переменные , а не содержимое, которое вы помещаете в переменную friend_sex.

Так что еслиВы измените его на это:

if(friend_sex == 'm')

Теперь, это проверит, является ли content из friend_sex 'm'.

1 голос
/ 11 февраля 2012

Вы захотите проверить что-то вроде if (friend_sex == 'm') вместо проверки по переменной m.По сути, вам необходимо проверить ожидаемое значение.

1 голос
/ 11 февраля 2012

Вы сравниваете friend_sex с неинициализированной переменной, m. Вы должны сравнить его с константой 'm'. Обратите внимание на одинарные кавычки.

1 голос
/ 11 февраля 2012

вы проверяете friend_sex aginst m и f, которые не инициализированы. Вы можете проверить по буквам «м» или «F»

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