[英]C++ Char checking gives outrageous value
我正在嘗試制作一個程序來檢查和列出一些學生的性別,其中m是女性,l是男性。 我不確定我的代碼有什么問題,但是當我打印出m和l變量時,它們要么真的很大。 嘗試解決這個問題已有幾個小時,非常感謝您的幫助,歡呼。
PS對不起,我的英語不好。
#include<iostream>
#include<string>
using namespace std;
main()
{
char gender[20];
int jlh,i,j,m,l;
cin>>jlh;
system("cls");
for(i=0;i<jlh;i++)
{ cout<<"Data "<<i+1<<endl;
cout<<"Enter your gender - "<<endl;
cin>>gender[i];
}
m,l=0;
for(i=0;i<jlh;i++){
if(gender[i]=='p'){
m=m+1;
}
else if(gender[i]=='l'){
l=l+1;
}
}
cout<<endl<<l<<endl;
cout<<m;
}
線
m,l=0;
不能按預期工作。 查找逗號運算符 ,它計算第一個操作數(在這種情況下為m
),舍棄結果,然后求值並返回第二個操作數。 因此只有l
設置為零。 我建議將聲明移到這一行並一次性初始化變量,就像這樣
int m=0, l=0;
for (int i=0; i<jlh; i++)
...
我還將把像i
這樣的變量的聲明移動到需要它們的地方,如上所述。 無需將所有聲明放在函數的開頭。
然后輸出
cout<<endl<<l<<endl;
cout<<m;
將endl
放在第一個變量之前和之后,但不能放在第二個變量之后。 您應該在輸出的最后一行之后有一個endl
,否則控制台提示符就在您的值之后。 具有以下內容將提高可讀性:
std::cout << "Number of females: " << m << std::endl;
std::cout << "Number of males: " << l << std::endl;
您還應確保輸入的值不超過20個,因為您的數組具有此大小。 但是甚至不需要它(也許在您的真實代碼中,而在MCVE中卻沒有):您可以在讀取輸入時增加變量,而無需將其存儲在數組中。 這擺脫了這個任意限制。 如果確實需要這些值,則應使用std::vector
而不是固定大小的數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.