Borland C++ 5.02 cout 未在控制台上显示 window

Borland C++ 5.02 cout not showing on the console window

对于这个新手问题,我很抱歉, 我试图使用 borland 5.02 制作这个程序,但由于某种原因,当我写 married 时,if (stat) 中的 cout 没有显示在控制台 window 上。我不知道出了什么问题,我已经被困了几个小时。请帮助我

#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 () ;

}

更新:我之前试过把gets(STAT) ;改成cin >> STAT ;,但是好像没什么效果。当我 运行 他们

时程序看起来像这样

身份证号码:0123141421

姓名:维克蒙

派系:1

状态:已婚(问题出在这里)

-结果-

您的全科医生:1500000

你的TI:0

你的助教:0

您的TG:1500000


即使我在状态上写了 married,cout << "Number of children : " << endl ; 也没有出现在控制台 window 上。就好像 if (STAT == "Married" || STAT == "married") 不起作用,而 "Status: married" 算作

else
   {
    TI = 0 ;
    TA = 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 () ;

}
如果 STATstd::string.

STAT == "Married" 将在标准 C++ 中工作

但是,它是一个 char 数组,这意味着您正在比较两个 指针 。因为 C++ 不支持数组的直接比较。所以这两个数组表达式中的每一个都会衰减到指向第一项的指针。

而且这些指针保证是不同的。


注 1:Borland C++ 5.02 听起来像是 1990 年代中期,在第一个 C++ 标准出现之前。有许多免费的现代编译器。最著名的三个是g++、clang和Visual C++(后者仅适用于PC平台)。

注 2:我记得 Borland C++ 中的 std::string 完全是拙劣的。如果仅使用 std::string 不起作用,请考虑使用 strcmp 来比较 C 字符串(就像您拥有的数组)。

注 3:在标准 C++ 中(自 1998 年第一个标准以来)没有 <iostream.h> 头文件。而是包括 <iostream>,并可能添加 using namespace std;。或适当的 using 指令,或 coutendl 等名称限定,即写作 std::coutstd::endl.


在其他新闻中:

  • 通过为宏保留 SHOUTCASE 名称,您可以显着简化代码阅读体验,并避免意外的文本替换启动。更不用说符合关于这个的共同约定了。

  • 通过使用 getline 而不是 >>,程序可以读取其中包含 space 的名称。然而,这只有在输入缓冲区为空时才能很好地工作(因为 getline 不会跳过 whitespace)。所以,这是需要考虑的事情,但它可能涉及一些工作。

我修改了你的代码!

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

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

   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 == "Married") || (STAT == "married"))
    {
      cout << "Number of children : " ; // FIX #2 -------------------------------------------------
      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 () ;

}

问题是你不能只使用 C++ 中的 if 语句比较数组 您可以使用 char,然后只使用单个字符,例如 'M' 或者您可以改为使用字符串,但它可能会引起一些警告。