2016-11-06 2 views
0

Прошу прощения за этот вопрос новичков, Я попытался сделать эту программу, используя borland 5.02, но по какой-то причине cout в if (stat) не отображается на окно консоли, когда я выхожу замуж. Я не знаю, что случилось, и я застрял часами. пожалуйста, помогите мнеBorland C++ 5.02 cout не отображается в окне консоли

#include <stdio.h> 
#include <conio.h> 
#include <iostream.h> 

int main() 
{ 
    int NIP, GOL, GP, TI, TA, JA, TG ; 
    char NM[20], STAT[10] ; 

    cout << "ID Number : " ; 
    cin >> NIP ; 

    cout << "Name : " ; 
    cin >> NM ; 

    cout << "Faction : " ; 
    cin >> GOL ; 

    if (GOL == 1) 
    { 
    GP = 1500000 ; 
    } 
    else if (GOL == 2) 
    { 
    GP = 2000000 ; 
    } 
    else 
    { 
    GP = 2500000 ; 
    } 

    cout << "Status : " ; 
    gets (STAT) ; 

    if (STAT == "Married" || STAT == "married") 
    { 
     cout << "Number of children : " << endl ; 
     cin >> JA ; 
     TI = 0.05 * GP ; 

     if (JA <= 3) 
     { 
     TA = 0.02 * GP * JA ; 
     } 
     else 
     { 
     TA = 0.02 * GP * 3 ; 
     } 
    } 
    else 
    { 
    TI = 0 ; 
    TA = 0 ; 
    } 

    TG = GP + TI+ TA ; 

    cout << endl << "-Results-" << endl ; 
    cout << "Your GP: " << GP << endl ; 
    cout << "Your TI: " << TI << endl ; 
    cout << "Your TA: " << TA << endl ; 
    cout << "Your TG: " << TG << endl ; 

    getch() ; 

} 

Update: я пытался изменить gets(STAT) ; к cin >> STAT ; раньше, но это, кажется, не имеют никакого эффекта. программа выглядела так, когда я запускаю их


Идентификационный номер:

Имя: Vykmon

Фракция: 1

Статус: женат (Здесь проблема)

-Результаты-

Ваш GP: 1500000

Ваш TI: 0

Ваш ТА: 0

Ваш TG: 1500000


Даже если я должен написать женатый на статус, cout << "Number of children : " << endl ; Ждут» t отображается в окне консоли. это как если бы if (STAT == "Married" || STAT == "married") не работают, а «Статус: женат» считается

else 
    { 
    TI = 0 ; 
    TA = 0 ; 
    } 
+1

«STAT ==« Женат »« Это не способ сравнить массив 2 char – Danh

+0

('gets()' устарел для того, чтобы не предоставлять средства для предотвращения переполнения буфера. Имена CAPS для локальных переменных - необычные.) Что вы пытаетесь выяснить, что происходит? Подружитесь с отладчиком. 'cout << '|' << STAT << '|' << endl; 'сразу после' std :: cin.get (STAT, sizeof STAT); '. Попробуйте «Женат» == STAT' и '" Married "== string (STAT)'. – greybeard

+0

Исправлено это утверждение 'main': у C++ никогда не было« неявного int ». –

ответ

1

STAT == "Married" будет работать в стандартном C++, если STAT были std::string.

Однако, это массив из char, а это значит, что вы сравниваете два указателей. Потому что C++ не поддерживает прямое сравнение массивов. Поэтому каждое из двух выражений массива распадается на указатель на первый элемент.

И эти указатели гарантированно отличаются друг от друга.


Примечание 1: Borland C++ 5.02 звучит как середина 1990-х годов, до первого стандарта C++. Существует множество современных современных компиляторов. Три наиболее известных - g ++, clang и Visual C++ (последняя доступна только для платформы ПК).

Примечание 2: Насколько я помню, std::string в Borland C++ был полностью испорчен. Если просто использовать std::string не работает, рассмотрите возможность использования strcmp для сравнения строк C (например, массивов, которые у вас есть).

Примечание 3: В стандартном C++ (начиная с первого стандарта в 1998 году) отсутствует заголовок <iostream.h>.Вместо этого включите <iostream> и, возможно, добавьте using namespace std;. Или соответствующие using директивы или квалификации таких наименований, как cout и endl, то есть написание std::cout и std::endl.


В других новостях:

  • Резервируя имена SHOUTCASE для макросов, вы можете облегчить чтение опыта коды значительно, и избежать непреднамеренного текста замены для загрузки. Не говоря уже об общем соглашении об этом.

  • Используя getline вместо >>, программа может читать имя с пробелом в нем. Однако это работает только хорошо, когда входной буфер пуст (поскольку getline не пропускает пробелы). Итак, это то, что нужно учитывать, но это может быть связано с некоторой работой.

0

я попытался написать код по-разному, и как-то он работает. Но я все еще не знал источник проблемы из предыдущего кода.

#include <stdio.h> 
#include <conio.h> 
#include <iostream.h> 

main() 
{ 
    char NM [20], STAT ; 
    int NIP, GOL, GP, JA, TI, TA, TG ; 

    cout << "ID Number: " ; 
    cin >> NIP ; 

    cout << "Name: " ; 
    gets (NM) ; 

    cout << "Faction: " ; 
    cin >> GOL ; 

    if (GOL == 1) 
     GP = 1500000 ; 
    else if (GOL == 2) 
     GP = 2000000 ; 
    else 
     GP = 2500000 ; 

    cout << "Status: " ; 
    cin >> STAT ; 

    if (STAT == 'K') 
    { 
     TI = 0.05 * GP ; 
     cout << "Number of children: " ; 
     cin >> JA ; 
     if (JA <= 3) 
      TA = 0.02 * GP * JA ; 
     else 
      TA = 0.02 * GP * 3 ; 
    } 
    else 
     TI = 0, TA = 0 ; 

    TG = GP + TI + TA ; 

    cout << endl << "-Results-" << endl ; 
    cout << "Your GP: " << GP << endl ; 
    cout << "Your TI: " << TI << endl ; 
    cout << "Your TA: " << TA << endl ; 
    cout << "Your TG: " << TG << endl ; 

    getch() ; 

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