Willkommen auf Planet-Liebe

diskutiere über Liebe, Sex und Leidenschaft und werde Teil einer spannenden Community! :)

jetzt registrieren

Auris C-Verzweiflungsthread...

Dieses Thema im Forum "Musik, Filme, Computer und andere Medien" wurde erstellt von Auricularia, 19 November 2004.

  1. Auricularia
    Verbringt hier viel Zeit
    1.653
    123
    3
    Verheiratet
    Hi....

    Ich sitz seit zwei Tagen an einer Aufgabe und kriegs nicht hin... :frown:
    Es geht darum, dass man eine bestimmte Punktzahl eingibt und
    das Programm dann die dazugehörige Note ausspuckt.
    Ich versteh das Prinzip soweit schon, aber die blöden ifs und elses
    mögen mich irgendwie net...

    Code:
    #include <stdio.h>
    void main (void)
    {
    	int p;
    	printf("Gib die Punktzahl ein!\n");
    	scanf("%i",&p);
    	if (p<51)
    	{
    		printf("Nicht bestanden\n");
    	}
    	else
    	{	
    		if(p>=51 && p<65)
    		{
    			printf("ausreichend\n");
    		}
    		else 
    		{
    			if(p>=65 && p<77)
    			{
    				printf("befriedigend\n");
    			{
    			else
    			{
    				if(p>=77 && p<86)
    				{
    					printf("gut\n");
    				}
    				else
    				{
    					if(p>=86)
    					{
    						printf("sehr gut\n")
    				}
    			}
    		}
    	}
    }
    
    
    Das hab ich, aber ich krieg die Fehlermeldungen
    Zeile 23: error C2181: Ungueltiges 'else' ohne zugehoeriges 'if'
    Zeile 34: error C2143: Syntaxfehler : Fehlendes ';' vor '}'
    Zeile 39: fatal error C1004: Unerwartetes Dateiende gefunden

    Kann mir da mal einer helfen? *lieb blinzel*

    Auri
     
    #1
    Auricularia, 19 November 2004
  2. Mr. Poldi
    Verbringt hier viel Zeit
    3.068
    121
    0
    vergeben und glücklich
    Code:
    #include <stdio.h>
    void main (void)
    {
    	int p;
    	printf("Gib die Punktzahl ein!\n");
    	scanf("%i",&p);
    	if (p<51)
    	{
    		printf("Nicht bestanden\n");
    	}
    	else
    	{	
    		if (p>=51 && p<65)
    		{
    			printf("ausreichend\n");
    		}
    		else 
    		{
    			if (p>=65 && p<77)
    			{
    				printf("befriedigend\n");
    			[size=7][color=red][b]}[/b][/color][/size]
    			else
    			{
    				if (p>=77 && p<86)
    				{
    					printf("gut\n");
    				}
    				else
    				{
    					if(p>=86)
    					{
    						printf("sehr gut\n");
                                            [size=7][color=red][b]}[/b][/color][/size]
    				}
    			}
    		}
    	}
    }
    
    
    Hab das fehlende } mal rot gemacht, hoffe man sieht es.
    Hab allerdings nicht getestet ob der Code syntaktisch gefressen wird (hab glaube ich keinen C-Compiler hier drauf), vom überfliegen her müsste es aber ok sein.

    Abgesehen davon kommt mir die Signatur von main() etwas merkwürdig vor ... wo sind argc und argv?

    Edit: int main(int argc, char *argv[]), aber solange das Programm keine Kommandozeilen-Parameter braucht und keinen Returncode zurückliefern soll geht deine Version natürlich auch.
     
    #2
    Mr. Poldi, 19 November 2004
  3. Auricularia
    Verbringt hier viel Zeit Themenstarter
    1.653
    123
    3
    Verheiratet
    Danke, Kirby!

    Läuft aber trotzdem nicht. :frown: Die Fehlermeldung ist noch die gleiche...
    Ach menno... :frown:

    Was ist denn argv und argc? Das kenn ich garnicht...
     
    #3
    Auricularia, 19 November 2004
  4. Mr. Poldi
    Verbringt hier viel Zeit
    3.068
    121
    0
    vergeben und glücklich
    Fieser Fehler den du da noch reingebaut hattest, muss man schon ganz genau hingucken um den zu sehen :smile:

    Hab meinen Beitrag überarbeitet, so müsste es funktionieren (compiliert bei mir mit GNU).

    argc und argv sind Parameter für die Anzahl und den Werte von Kommendozeiilen-Argumenten die man dem Programm übergibt.
     
    #4
    Mr. Poldi, 19 November 2004
  5. Auricularia
    Verbringt hier viel Zeit Themenstarter
    1.653
    123
    3
    Verheiratet
    Wow, ich kann's net glauben!!! Es läuft und macht sogar, was es
    soll! *freu* Super, vielen, vielen Dank, Kirby!

    Blöd, dass das immer so kleine Fehler sind... Vielleicht sollte ich den
    Kram erst mit Hand vorschreiben und die zusammengehörigen Teile
    bunt machen, damit ich den Überblick net verlier. :smile:
     
    #5
    Auricularia, 19 November 2004
  6. Gigl
    Verbringt hier viel Zeit
    321
    101
    0
    vergeben und glücklich
    Hm... wäre ein switch-case nicht übersichtlicher? (sofern es das in C gibt, hab mich nicht wirklich damit beschäftigt...)
     
    #6
    Gigl, 19 November 2004
  7. Auricularia
    Verbringt hier viel Zeit Themenstarter
    1.653
    123
    3
    Verheiratet
    Gigl, damit hatte ich es zuerst auch versucht, aber switch-case geht
    irgendwie nur mit Konstanten und nicht mit Formeln. Leider... :smile:
     
    #7
    Auricularia, 19 November 2004
  8. User 9402
    Meistens hier zu finden
    1.385
    133
    63
    vergeben und glücklich
    Ginge zwar auch mit einem switch-case-Verteiler, aber dann
    würde der Code wirklich dämlich aussehen. In C/C++ kann man
    bei switch-case-Verteilern keine Zahlenbereiche angeben. Man
    müßte also alle gewünschten Zahlen untereinander schreiben.
    Würde dann also inetwa so aussehen:

    switch (p)
    {
    case 51:
    case 52:
    case 53:
    ...
    case 64:
    printf("ausreichend\n");
    break;
    case 65:
    case 66:
    ...
    case 76:
    printf("befriedigend\n");
    break;
    ...
    }

    Naja, sieht schon etwas komisch aus.

    @Auricularia
    Noch einen kleinen Tipp wegen der Übersichtlichkeit. Das Programm
    läßt sich auch so schreiben und dann fallen fehlende Klammern schneller
    auf:

    #include <stdio.h>
    void main (void)
    {
    int p;
    printf("Gib die Punktzahl ein!\n");
    scanf("%i",&p);
    if (p<51)
    {
    printf("Nicht bestanden\n");​
    }
    else if (p>=51 && p<65)
    {
    printf("ausreichend\n");​
    }
    else if (p>=65 && p<77)
    {
    printf("befriedigend\n");​
    }
    else if (p>=77 && p<86)
    {
    printf("gut\n");​
    }
    else if(p>=86)
    {
    printf("sehr gut\n");​
    }​
    }
     
    #8
    User 9402, 20 November 2004
  9. Mr. Poldi
    Verbringt hier viel Zeit
    3.068
    121
    0
    vergeben und glücklich
    @emotion
    Naja, über Blockbildung kann man sich herrlich streiten.
    Ich finde, die Hauptsache ist dass man überhaupt Blöcke erkennt, und bei Auris Formatierung finde ich sieht man besser was wo dazugehört.

    Ich schreib meist so

    Code:
    if () {
      // blah
    } else {
      // blahblubb
      if () {
        // foobar
      }
    }
    
    usw.
     
    #9
    Mr. Poldi, 20 November 2004
  10. emotion
    Verbringt hier viel Zeit
    927
    101
    0
    Single
    Danke für die Blumen. :bier:

    Dann sag ich jetzt doch was dazu.

    Mein Lehrer ließ für die Schule nichts anderes gelten, als seine Semantik.
    Keine Abweichung (unbestraft) möglich.
    Und er wolle es genau so versetzt wie die Threadstarterin es macht ...
     
    #10
    emotion, 20 November 2004
  11. bmw-power
    Gast
    0
    also in java, perl, shellscripting und assembler würd ich das eh ganz anders machen

    *aufpostlöschungwart*
     
    #11
    bmw-power, 20 November 2004
  12. Auricularia
    Verbringt hier viel Zeit Themenstarter
    1.653
    123
    3
    Verheiratet
    Wieso auf Postlöschung? *bahnhof*


    Danke für den Tipp, Finalizer! :smile:
    Aber ich fürchte, ich hab's mir schon so versetzt angewöhnt... So seh ich
    zwar die Klammern nicht, aber ich blick irgendwie besser durch, welches
    if zu welchem else gehört...

    Heute hatten wir ein Zwischentestat, und da hab ich schon wieder ewig an
    so'nem Mistfehler gesessen. :angryfire Bin aber von selbst drauf gekommen, ich
    hatte nur einen Punkt hinter einer Zahl vergessen.
    Warum kann C denn eine Zahl, wenn ich z.B. 3 schreib, nicht verwursten?
    Da muss ich 3.0 schreiben... Liegt das daran, dass ich meine Variablen
    als double deklariert hab?

    Auri
     
    #12
    Auricularia, 22 November 2004
  13. User 9402
    Meistens hier zu finden
    1.385
    133
    63
    vergeben und glücklich
    Du hast Dir die richtige Antwort schon selbst gegeben.
    Du könntest auch noch schreiben:

    double a = (double) 3;

    Das würde zwar auch gehen, sieht aber nicht sehr
    schön aus.
     
    #13
    User 9402, 22 November 2004
  14. Auricularia
    Verbringt hier viel Zeit Themenstarter
    1.653
    123
    3
    Verheiratet
    Hi!
    Ich brauch mal wieder Hilfe (das nächste Testat steht am 3.1. an :zwinker: )...
    Ich hab jetzt statt Visual C++ Dev-C++, aber der macht das Fenster, in
    dem er mein Programm ausführt, immer sofort wieder zu, also so, dass das
    Fenster nur kurz aufblinkt. Gibt's da 'n Befehl, dass er das Fenster so lange
    lässt, bis ich auf ne Taste gedrückt hab?

    Auri
     
    #14
    Auricularia, 29 Dezember 2004
  15. User 9402
    Meistens hier zu finden
    1.385
    133
    63
    vergeben und glücklich
    Falls noch nicht geschehen, die include-Datei <stdio.h>
    einbinden und dann die Methode getch() aufrufen.
    Diese Methode wartet solange bis eine beliebige Taste
    gedrückt wurde.
     
    #15
    User 9402, 29 Dezember 2004
  16. Auricularia
    Verbringt hier viel Zeit Themenstarter
    1.653
    123
    3
    Verheiratet
    Hm... so hatte ich eigentlich auch gedacht, aber das geht irgendwie net... :frown:
    Das war mein Code (jetzt einfach nur mal zum probiern):

    Code:
    #include <stdio.h>
    
    void main (void)
    
    {
    
         printf("test\n");
         getch();
    
    }
    Als Fehlermeldung krieg ich dann:
    untitl~1.cpp: In function `int main(...)':
    untitl~1.cpp:8: implicit declaration of function `int getch(...)

    Immer diese Kleinigkeiten, an denen man so ewig hängt... :angryfire
     
    #16
    Auricularia, 29 Dezember 2004
  17. User 9402
    Meistens hier zu finden
    1.385
    133
    63
    vergeben und glücklich
    Hi,

    Du mußt noch die include-Datei conio.h einbinden.
    Dann müßte es funktionieren.
     
    #17
    User 9402, 29 Dezember 2004
  18. -=Me=-
    Gast
    0
    Oder einfach den Windows-Systembefehl "PAUSE" aufrufen...

    system("PAUSE");

    Bin mir bei der Syntax jetzt net ganz sicher.
     
    #18
    -=Me=-, 29 Dezember 2004
  19. Auricularia
    Verbringt hier viel Zeit Themenstarter
    1.653
    123
    3
    Verheiratet
    Ah... cool, danke! :herz: Das mit dem Pause-Befehl ging net, aber das
    mit der anderen Header-Datei klappt. Da muss man auch erst mal
    drauf kommen... :smile:
     
    #19
    Auricularia, 29 Dezember 2004
  20. Auricularia
    Verbringt hier viel Zeit Themenstarter
    1.653
    123
    3
    Verheiratet
    Okeeh... das mit dem Pause-Dings geht doch. Dafür hab ich Probleme mit
    dem getchr(); Je nach Programm läuft es mal und mal nicht. :flennen:
    Vielleicht kann mal jemand drüber schaun und mir sagen, warum das so ist...

    Code:
    #include <iostream.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    #include <conio.h>
    int main()
    {
           int a,b,c;
           for(a=1;a<=10;a++)
           {
               for(b=1;b<=10;b++)
               {
                    c=a*b;
                    printf("%i * %i =%i\n",a,b,c);
               }
               getchr();
           }
    
          system("PAUSE");
          return 0;
    }
    Kann man das getchr nicht in ne Schleife reintun oder was ist da los? Als
    Fehlermeldung krieg ich wieder "implicit declaration of function `int getch(...)"
     
    #20
    Auricularia, 2 Januar 2005

jetzt kostenlos registrieren und hier antworten