簡體   English   中英

C ++字符檢查提供了驚人的價值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM