对不起这个新手问题, 我尝试使用borland 5.02制作这个程序,但由于某些原因,if(stat)中的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 () ;
}
更新:我之前尝试将gets(STAT) ;
更改为cin >> STAT ;
,但似乎没有任何效果。当我运行它时程序看起来像这样
身份证号码:0123141421
姓名:Vykmon
派系:1
状态:结婚(这是问题)
- 结果 -
您的GP:1500000
您的TI:0
你的TA:0
您的TG:1500000
即使我已经在状态上写了结婚,cout << "Number of children : " << endl ;
也没有显示在控制台窗口上。好像if (STAT == "Married" || STAT == "married")
没有工作,而且状态:已经结婚&#34;算作
else
{
TI = 0 ;
TA = 0 ;
}
答案 0 :(得分:1)
STAT == "Married"
为STAT
, std::string
将在标准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
指令,或cout
和endl
等名称的资格,即撰写std::cout
和std::endl
。
在其他新闻中:
通过为宏保留SHOUTCASE名称,可以显着简化代码阅读体验,并避免意外的文本替换进行引导。更不用说符合关于此的共同惯例。
通过使用getline
代替>>
,程序可以读取其中包含空格的名称。但是,这仅在输入缓冲区为空时才能正常工作(因为getline
不会跳过空格)。所以,这是需要考虑的事情,但它可能涉及一些工作。
答案 1 :(得分: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 () ;
}
答案 2 :(得分:0)
我修改了你的代码!
#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&#39; M&#39; 或者你可以使用字符串,但也许它会引起一些警告。