1. ホーム
  2. c

[解決済み] エラー: 代入の l 値が無効です [in c].

2022-02-17 09:33:10

質問

何が問題なのかがわからない。

プログラミングをしていて、ここの問題を解決しようとしたのですが、バグが見当たりません。このプログラムのどこを間違えてコーディングしてしまったのか、みなさんがアドバイスしてくれませんか?それは感謝されます:)

これは、私がプログラムをコンパイルした後に、コンパイヤーが言ったことです。

In function 'main':
Line 40: error: invalid lvalue in assignment

というものである。

/*Calculate area for single room*/
width * length = totalArea_single;

そして、これがコードの全体像です。

#include <stdio.h>
#include <stdlib.h>

/*Main function of this program*/
int main()
{
char input[512];/*buffer*/
char roomInput[512];/*buffer*/
int roomCount =0;/*Store number of room*/
int width =0;/*width integer*/
int length =0;/*length integer*/
int room =0;/*To make sure roomCount have to be more than 0*/
int totalArea_single =0;
int totalArea_all =0;  

/*Ask how many room in the house*/
printf("\nHow many rooms in the house?: ");
fgets(input,sizeof(input),stdin);
sscanf(input,"%d",&roomCount);

/*For loop for calculating room area by number of room entered*/
for(room=0;room<roomCount;room++)
{
    /*Input for width and have to be more than 0*/
    while(width>0)
    {
        printf("Width in meters for room %d: ",room+1);
        fgets(roomInput,sizeof(roomInput),stdin);
        sscanf(roomInput,"%d",&width);
    }

    /*Input for length and have to be more than 0*/
    while(length>0)
    {
        printf("Length in meters for room %d: ",room+1);
        fgets(roomInput,sizeof(roomInput),stdin);
        sscanf(roomInput,"%d",&length);
    }

    /*Calculate area for single room*/
    width * length = totalArea_single;

    /*Store area of all rooms*/
    totalArea_all = totalArea_single + totalArea_all;

    width = -1;
    length = -1;
}

/*Print out total areas of the house*/
printf("\nTotal areas of the house is %d square meters",totalArea_all);

return 0;
}

何がいけなかったのか、よくわかりません...。助けてくれてありがとうございます。)

解決方法を教えてください。

コンパイラのエラーをよく見てみると、次のように書かれています。

error: invalid lvalue in assignment

このエラーを理解するためには、次のことを理解する必要があります。 rvalue . を使用します。 は、1つの式を越えて永続するオブジェクトを指します。例えば は、名前を持つオブジェクトです。一方 rvalue は一時的な値で、それを使用する式を越えて永続することはありません。

そこで、この問題を引き起こしているコードラインを見ると

width * length = totalArea_single;

そのため、何らかの値やデータを保存する際には の左側にある = 演算子を使用します。 一方 幅 * 長さ を生成します。 rvalue 簡単に言えば、どんな値でも格納するためにはlvalueが必要だということです。そのため、このステートメントを次のように変更する必要があります。

totalArea_single = width * length;

lvalueとrvalueの詳細については、こちらを参照してください。 SO リンク .