Forum: Mikrocontroller und Digitale Elektronik c progammfehler


von Daniel L. (daniel_l49)


Lesenswert?

Hallo zusammen!

Bei mir tritt dieser Fehler auf Error lvalue required as left operand of 
assignment.
ich weiß einfach nicht wo der Fehler liegt.

hier der ausschnitt aus dem Programm
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <stdio.h>
4
#include "lcd.h"
5
#define F_CPU 3686400UL
6
#include <util/delay.h> 
7
8
int Addi (int,int ); // funktionen definieren
9
int Sub  (int,int );
10
int Multi(int,int );
11
int Divi (int,int );
12
13
int Addi(int z1, int z2) // funktionen
14
{
15
  int sum;
16
  z1 + z2 = sum;   // bei all diesen rechnungen tritt der Fehler auf
17
  
18
  return(sum);
19
}
20
int Sub(int z1, int z2)
21
{
22
  int dif;
23
  z1 - z2 = dif;
24
  
25
  return(dif);
26
}
27
int Multi(int z1, int z2)
28
{
29
  int Pro;
30
  z1 * z2 =Pro ;
31
  
32
  return(Pro);
33
}
34
int Divi(int z1, int  z2)
35
{
36
  int quo,Rest;
37
  z1 = 0;
38
  
39
  if (z2 == 0)
40
  {
41
    quo = 0;
42
  } 
43
  else
44
  {
45
      z1 / z2 = quo;
46
      z1 % z2 = Rest;
47
  }
48
  
49
  
50
  return(quo,Rest);
51
}

mfg Daniel.

von Frank G. (frank_g53)


Lesenswert?

Hi,

müsste das nicht so sein: z=x+y ?

Gruß
Frank

von Gerhard W. (gerhard86)


Lesenswert?

Na, was soll z1+z2=sum denn heißen? Du willst doch sum z1+z2 zuweisen, 
also gehört sum=z1+z2

von Kindergärtner (Gast)


Lesenswert?

Daniel L. schrieb:
> z1 + z2 = sum;   // bei all diesen rechnungen tritt der Fehler auf
Diese Zeile macht keinen Sinn. Da steht: Berechne die Summe z1+z2 und 
speichere sie in einem temporären Speicher. Überschreibe die Summe mit 
dem Inhalt von "sum". Vergesse den temporären Speicher wieder. Im 
Endeffekt bewirkt das also gar nichts. Daher mag der Compiler das nicht. 
Bitte erst ein C Buch lesen.

von Rene H. (Gast)


Lesenswert?

sum = z1 + z2;

etc.

Grüsse,
René

von Justus S. (jussa)


Lesenswert?

einfach nur autsch...

von dadada (Gast)


Lesenswert?

a) C Buch kaufen
b) z1 + z2 = sum; muss sum = z1 + z2; heißen.

von Daniel L. (daniel_l49)


Lesenswert?

Danke für die schnellen Antworten

ich bin vielecht ein idiot , warum bin ich da nicht früher 
draufgekommen.

von Dummchen (Gast)


Lesenswert?

hihi, ein echter "Dummchen" Fehler

Wozu gibt es eigentlich Debugger!

;)

von Spess53 (Gast)


Lesenswert?

Hi

>Wozu gibt es eigentlich Debugger!

Was nutzt ein Debugger, wenn das Programm nicht compiliert wird?

Dein Name scheint Programm zu sein.

MfG Spess

von Olga (Gast)


Lesenswert?

Dummchen schrieb:
> Wozu gibt es eigentlich Debugger!

Dein Name ist anscheinend Programm. Was soll ein Debugger bringen, wenn 
der Quelltext sich nicht übersetzten lässt?!?

von Dummchen (Gast)


Lesenswert?

Latürnich, ich Dummchen. :)

Bin am Bohren und wohl zuviel abgelenkt ..

von Spess53 (Gast)


Lesenswert?

Hi

>Bin am Bohren und wohl zuviel abgelenkt ..

Mit Sicherheit in einer Körperöffnung.

MfG Spess

von Dummchen (Gast)


Lesenswert?

> Mit Sicherheit in einer Körperöffnung.

Ne, beim Gehäusebau an meiner kleinen Ständerbohrmaschine.

Außerdem habe ich ein Ohr am Wahlergebnis und ein Auge auf den 
Wahlverlierer FDP, warüber ich mich besonders freue. Ein guter Tag 
heute!

:)

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Daniel L. schrieb:
> lvalue required as left operand of
> assignment.

Daniel L. schrieb:
> Bei mir tritt dieser Fehler auf Error lvalue required as left operand of
> assignment.

manchmal reicht es auch einfach aus, mal den Text auf deutsch zu 
übersetzten.

Links-Wert benötigt als linker Operand einer Zuweisung.


Nimm mal folgendes Zuweisungs-Beispiel:

  Merkel = 'doof'

dieses ist eine Zuweisung. Der Variable "Merkel" wird der Wert "doof" 
zugewiesen.

Die Zuweisung besteht aus einem Links-Operanden (der Variable Merkel), 
einem rechts-Operanden (dem Wert "doof"), und einem Operator (dem ")

Aber warum nicht

  'doof' = Merkel ?

Nun, das ist halt so in C vorgegeben, daß links das steht, was 
irgendeine Eigenschaft annehmen soll.


Zwischen-Hinweis: Wir reden hier nicht über Typen-Validierung. Man 
könnte ja durchaus auch
   Merkel = 'toll'
zugewiesen werden, aber das könnte ja möglicherweise zu einem 
Wertebereichs-Konflikt führen, da die Variable Merkel diese 
Werteausprägung nicht annehmen kann. Auch sowas mag der Compiler prüfen, 
aber das war ja nicht das was er angemackert hat.



um nun zu deiner Stolper-Zeile zu kommen:

>   z1 + z2 = sum;   // bei all diesen rechnungen tritt der Fehler auf


rechts (als R-Value) steht SUM. Also wird dem links vom "=" dasjenige 
zugewiesen werden, was rechts steht (der Wert der Variable sum)

aber was steht links? Antwort: Die Summe zweier Variablen, die durchaus 
für sich Werte enthalten können. Allerdings wird das Ergebnis von z1+z2 
nur temporär vorgehalten, und nach der Berchnung wieder weggeworfen.

Da ist eigentlich das was der Compiler anmeckert: Er beklagt, daß er 
einer temporären Variablen einen Wert zuweisen soll, die nach der 
Zuweisung wieder weggeworfen wird. er hätte aber lieber etwas lang 
lebigeres als eine temporäre Variable.

: Bearbeitet durch User
von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

1
return(quo,Rest);

Ich schätze das wird nicht das machen was du dir dabei erhoffst

von PittyJ (Gast)


Lesenswert?

Christopher B. schrieb:
> return(quo,Rest);
> Ich schätze das wird nicht das machen was du dir dabei erhoffst

Ist aber schon cool, dass der Compiler das akzeptiert.

Mit dem Komma-Operator kann man schon lustige Sachen machen, z.B:
return 3,1415;
Und jeder wundert sich, dass der Satellit abstürzt.

von dadada (Gast)


Lesenswert?

PittyJ schrieb:
> Mit dem Komma-Operator kann man schon lustige Sachen machen, z.B:
> return 3,1415;
> Und jeder wundert sich, dass der Satellit abstürzt.

Der 'Kommaoperator' ist leider auch nicht die stärkste Seite von 'C'. 
Man hätte in for-Schleifen Blöcke zulassen sollen, und den Kommaoperator 
abschaffen.

von ./. (Gast)


Lesenswert?

Gelegentlich eingestreute Oktalkonstanten sorgen auf fuer Spass.

von dadada (Gast)


Lesenswert?

./. schrieb:
> Gelegentlich eingestreute Oktalkonstanten sorgen auf fuer Spass.


sehr gut! Auch beliebt
if (a=0){....

von malefiz (Gast)


Lesenswert?

deine Division kannst du löschen das Ergebnis ist immer 0

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.