Warum ist bei Zeile 3 (int main () {) Ein Syntax Error?

decoyishere  22.10.2021, 19:27

schick den ganzen Fehler bitte

Daxih 
Beitragsersteller
 22.10.2021, 19:28

./Datei01.c: line 3: syntax error near unexpected token `('

'/Datei01.c: line 3: `int main() {

decoyishere  22.10.2021, 19:32

Aber das macht generell kein Sinn. Warum fragst du, ob wenn eine nummer / 1 = 0 ist? Das geht ja nicht ausser die Zahl ist 0. Und nummer/nummer gibt IMMER 1

Daxih 
Beitragsersteller
 22.10.2021, 19:33

Stimmt, da sollte eigentlich % hin.

davegarten  22.10.2021, 19:34

Könntest Du uns mal noch die Befehlszeile schicken, wie Du Dein Programm kompilierst? Weil syntaktisch sehe ich auf's erste keinen Fehler.

Daxih 
Beitragsersteller
 22.10.2021, 19:35

 clang -std=c11 -Wall -g Datei.c -c
Da kommen keine error und dann mach ich
./Datei.c
wo es mir einen Syntax Error zeigt

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

clang -std=c11 -Wall -g Datei.c -c

Da kommen keine error und dann mach ich ./Datei.c wo es mir einen Syntax Error zeigt

Autsch!

Nicht die C Datei ausführen, sondern das generierte Binary


Daxih 
Beitragsersteller
 22.10.2021, 19:38

Ah danke, aber leider:
-bash: .Datei01.o: cannot execute binary file: Exec format error
Am Besten ich schreib es einfach nochmal ganz neu, oder? Ich glaub ich hab da iwie nur Mist gemacht. Auf jeden Fall danke für die Hilfe

0
davegarten  22.10.2021, 19:41
@Daxih

Du willst auch kein obj File erzeugen, sondern ein ausführbares Binary.

Probier mal das:

clang -std=c11 -Wall -o Datei Datei.c

dann

./Datei



1
Daxih 
Beitragsersteller
 22.10.2021, 19:45
@davegarten

omg es funktsoniert. aaa vielen dank!
Nun muss ich nur noch den Code umschreiben weil 4 ist keine Primzahl lol

0
davegarten  22.10.2021, 19:47
@Daxih

Syntaktisch ist der Code korrekt. Elegant programmiert und universell einsetzbar ist er aber nicht. Schau Dir als Beispiel mal den Code weiter oben an von User decoyishere

1
Daxih 
Beitragsersteller
 22.10.2021, 19:49
@davegarten

Aber was wenn ich if (nummer / 1 && nummer / nummer == 0) mache?
Weil ja Primzahlen nur durch sich selbst und durch 1 teilbar sind. So zeigt es mir auch an, dass 4 keine Primzahl ist. Grad getestet.
Edit: nvm, es sagt 5 ist auch keine. Ich guck mir den code an. Danke

0
davegarten  22.10.2021, 20:10
@Daxih

Das hilft Dir nicht weiter. Jede Zahl x ist ohnehin immer durch 1 und durch sich selbst Teilbar (abgesehen von 0/0). Eine Zahl ist dann prim, wenn sie eine Ganzzahl grösser als 1 ist und durch keine andere Zahl ganzzahlig teilbar ist als durch sich selbst.

Das kann man aber für eine Zahl x nur beweisen, in dem man die Zahl x durch alle anderen Zahlen zwischen 2 und x dividiert und bei jeder Division prüft, ob der Quotient ganzzahlig ist oder nicht. In der Praxis macht man das aber nicht mit dem Divisionsoperator, sondern man verwendet den Modulo-Operator (%), den es auch in C gibt. Modulo bedeutet Rest einer ganzzahligen Division, z.B. "5 durch 3" ergibt "1 Rest 2", d.h. in C: 5 % 3 = 2. Eine Zahl x ist dann teilbar, wenn x % y = 0. In allen anderen Fällen, wenn x % y ungleich 0 ist, ist die Zahl nicht teilbar.

Wenn Du z.B. wissen willst, ob

5 eine primzahl ist, dann müsstest Du mit Deinem Programm prüfen:

5 % 4 = 1

5 % 3 = 2

5 % 2 = 3

(5%5 und 5%1 sind unnötig, da bereits klar ist, dass dies immer teilbar ist).

Wie Du siehst, 5 ist weder durch 4, 3, noch durch zwei teilbar und damit prim.

1
Daxih 
Beitragsersteller
 22.10.2021, 22:18
@davegarten

Ich wollte mich nochmal bedanken. Ich habe nun geschafft auch einen Code zu schreiben der funktsoniert. Zwar nicht so gut wie der von decoyishere, aber so das er das macht was er soll.

0

Der Code funktioniert:

#include <stdio.h>
int main() {
  int n, i, flag = 0;
  printf("Zahl eingeben: ");
  scanf("%d", &n);

  for (i = 2; i <= n / 2; ++i) {
    // keine Primzahl
    if (n % i == 0) {
      flag = 1;
      break;
    }
  }

  if (n == 1) {
    printf("1 geht leider nicht");
  } 
  else {
    if (flag == 0)
      printf("%d ist eine Primzahl.", n);
    else
      printf("%d ist keine Primzahl.", n);
  }

  return 0;
}

evtl. weil ein main nur einmal erlaubt ist im Hauptprogramm und du gerade in einem untergeordneten File bist