-1

行数が不明な入力ファイルを分析するコードに取り組んでいます。各行は、「国、都市、都市、州、人口、緯度、経度」の形式になっています。現在、私のコードが最小人口と最大人口を設定しているというエラーが発生しています。エラーは、「左オペランドは左辺値でなければなりません」と言います。これを調べてみましたが、答えが見つかりませんでした。

#include "city.h"
#include <iostream>
#include <fstream>
#include <string>

using std::string;
using std::ifstream;
using std::istream;
using std::ostream;
using std::cout;
using std::endl;
using std::getline;

void readLineOfData( istream& in, ostream& out, string &country,  string &city, string &city2, 
    string &state, int &pop, string &lat, string &longi);

void output( ostream& out, string country, string city, string city2,
    string state, int pop, string lat, string longi );

void cities( istream& in, ostream& out )
{
    ifstream ("cities.txt");
    string country, city, city2, state, lat, longi;
    int pop;
    readLineOfData(in, country, city, city2, state, pop, lat, longi);
    while(!in.fail())
    {

        output( cout, country, city, city2, state, pop, lat, longi );


        readLineOfData(in, country, city, city2, state, pop, lat, longi);
    }
    return;
}

void readLineOfData( istream& in, string &country,  string &city, string &city2, 
    string &state, int &pop, string &lat, string &longi)
{
    getline( in, country, ',');
    getline( in, city, ',');
    getline( in, city2, ',');
    getline( in, state, ',');
    in >> pop;
    in.ignore( 200, ',' );
    getline( in, lat, ',');
    getline( in, longi, '\n' );

}

void output( istream& in, ostream& out, string country, string city, string city2,
    string state, int pop, string lat, string longi )
{
    int smallestPop = 0;
    int largestPop = 0;
    string smallestCity;
    string largestCity;

    cout << country << endl;
    cout << city << endl;
    cout << city2 << endl;
    cout << state << endl;
    cout << pop << endl;
    cout << lat << endl;
    cout << longi << endl;

        if (pop < smallestPop || smallestPop == 0)
        {
            smallestPop = pop;
            smallestCity = city;
        }

        if (pop > largestPop || largestPop == 0)
        {
            largestPop = pop;
            largestCity = city;
        }

        out << "Smallest City: " << smallestCity << endl;
        out << "Population: " << smallestPop << endl;
        out << endl;
        out << "Largest City: " << largestCity << endl;
        out << "Largest Population: " << largestPop << endl;

}

どんな助けでも大歓迎です。

4

2 に答える 2

2

=いくつかの式で代わりに使用==しています:

if (pop < smallestPop || smallestPop = 0)

と:

if (pop > largestPop || largestPop = 0)

したがって、比較ではなく代入を行っています。演算子の優先順位が原因で、このエラーが発生しています。<との両方が最初のケース||よりも優先順位が高いため、最終的には次のようになります。=

((pop > smallestPop) || smallestPop) = 0

に割り当てていlvalueます。一方、これがあった場合:

 if ( pop < smallestPop || (smallestPop = 0) )

かっこによって割り当てが最初に行われるため、プログラムは正常にコンパイルされます。コメントに記載されているように、これらのタイプの問題を回避する簡単な方法は、定数を左側に配置することです。私はこのソリューションを気に入っていますが、多くの開発者はこの非伝統的な表記法に躊躇しています。

于 2013-03-09T03:40:14.920 に答える
0

コードを見て簡単に推測。「左オペランドは左辺値でなければならない」と報告するよくある状況は、等しいかどうかを比較しようとして誤って「=」(代入) 演算子を使用した場合です (C++ および他の多くの言語では「==」)。 .

于 2013-03-09T03:40:01.320 に答える