Man muss auch die Dinge lernen die man nach dem Abschluss braucht.
Man muss auch die Dinge lernen die man nach dem Abschluss braucht.
natura non facit saltus
So langweiliger Word Kurs geschafft, nu erste Woche Berufsschule am anderen Ende der Stadt
Wir ham Geld fürn Bus bekommen aber ich radel...
Guter Vorsatz
da pan a los que tiene hambre da hambre a justicia a los que tienen pan
Nachdem es die Woche nu endlich rihtig losgeht das erste C-Meistererk
Will natürlich noch nicht so wie Ich will do-while läuft und läuft.Code:#include <stdio.h> #include <ctype.h> #include <conio.h> int main() { char ean[14]; int Summe, Faktor, Zahl, Index, Wert, z, weiter; do { clrscr(); printf("Bitte geben Sie eine 13-stellige EAN ein\n"); scanf("%13s",&ean); z=0; for (int i=0; i<13; i++) { if (isdigit (ean[i])) z++; } if (z==13) { Summe=0; Faktor=3; Index=0; while (Index<12) { Zahl=(ean[Index])-48; if (Faktor==3) Faktor=1; else Faktor=3; Index=Index+1; Wert=Zahl*Faktor; Summe=Summe+Wert; } Wert=Summe%10; Zahl=(ean[12])-48; Wert=Wert+Zahl; if (Zahl!=0) { if (Wert==10) printf("Richtige EAN"); else printf("Ungültige EAN"); } else { if (Wert==0) printf("Richtige EAN"); else printf("Ungültige EAN\n"); } } else printf("Bitte geben sie genau 13 Ziffern ein."); getch(); printf("\nFuer eine weitere EAN eingabe druecken sie '1' fuer das Programmende eine beliebige sonstige Taste\n"); scanf("%d",&weiter); } while (weiter==1); return(0); }
Ich hab wieder das Doppel = vergessen!
Nu geht allerdings gar nichts mehr
Geändert von gubbel (16.10.2015 um 08:04 Uhr)
dein for-loop prüft nur i<13, da ean aber ein char[14] ist fehlt dir da eins.
statt z=z+1 kannst du einfach z++ nutzen. und z=z ist total sinnlos.
da dein loop nur 12 mal läuft ist z nie 13, also ist deine if-bedingung nie erfüllt.
Oh what a day! What a lovely day!
Nö ist 0-13, und es hieß wir braucne immer eins mehr in char arrays für abschließende 0.
Der Teil klappte schon länger einwandfrei
Und zuletzt hab Ichs auch hin gekriegt, es lief dann ohne noch was zu ändern. Ich muss vorher ein Programm nicht richtig abgebrochen haben dieser uralte Borland c++ Compiler fängt dann an zu spinnen.
Ich hab oben mal das mittlerweile komplett fertige Meisterwerk aktualisiert Allerdings macht er beim Kopieren die Einschübe nicht richtig und Ich bin zu faul dafür
Muss schließlich nu Struktogramm zeichnen
Geändert von gubbel (16.10.2015 um 08:06 Uhr)
lustigstes Programm ever:
"Ich hab keine Ahnung was mit meinem Laptop aufeinmal los ist!"Code:#include <stdio.h> main() { int i=2; while (i>0) printf("a\a"); }
Das Programm of doom an dem wir zu dritt Stundenlang gearbeitet haben
Das getchar klaut sich natürlich einen raus, deshalb sind es ab der 2. Zeile immer ein Vokal zu wenigCode:#include <stdio.h> #include <string.h> #include <conio.h> #include <io.h> main() { char text[1000]={0}; int AnzahlZeichen, AnzahlA, AnzahlE, AnzahlI, AnzahlO, AnzahlU, AnzahlVokale; char c; int Ende2=0; char Ende; while(Ende2!=27) { clrscr(); AnzahlVokale=0; AnzahlA=0; AnzahlE=0; AnzahlI=0; AnzahlO=0; AnzahlU=0; printf("Geben Sie einen belibiegen Text ein, das Programm gibt ihnen die Anzahl der Vokale aus.\n"); do { gets(text); AnzahlZeichen=strlen(text); for(int i=0; i<=AnzahlZeichen; i++) { c=text[i]; if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'||c=='A'||c=='E'||c=='I'||c=='O'||c=='U') { AnzahlVokale++; if(c=='a'||c=='A') AnzahlA++; else if(c=='e'||c=='E') AnzahlE++; else if(c=='i'||c=='I') AnzahlI++; else if(c=='o'||c=='o') AnzahlO++; else AnzahlU++; } } Ende=getchar(); } while(Ende!=EOF); printf("Die Anzahl der Vokale ist: %d.\n\Davon sind es %d mal A, %d mal E, %d mal I, %d mal O, %d mal U.\n", AnzahlVokale, AnzahlA, AnzahlE, AnzahlI, AnzahlO, AnzahlU); printf("Druecken sie Escape um das Programm zu beenden oder eine beliebige andere Taste um noch einen Text einzugeben.\n"); Ende2=getch(); } }
Ohne string wäre wohl besser, zu mindest war so die offizielle Lösung Aber wie kriegt man meine Methode ordenlich hin?
gets() ist böse. Da wird die Größe des Einfabepuffers nicht überprüft. Wenn ich mehr als 1000 Zeichen eingebe, kann ich dir im Speicher rumsauen. Nimm lieber gets_s, wenn es denn unbedingt sein muss. Außerdem gibt es bei deinem Programm eigentlich keinen Grund, conio.h und io.h zu verwenden. Die gibt es nur für Windows und selbst da nicht bei allen Compilern. Ansi-C reicht hier aber vollkommen aus, wenn du nicht darauf bestehst, das Programm mit ESC zu beenden. Überhaupt ist die 2. Schleife unnötig. Man kann doch auch einfach das Programm nochmal starten... Hier mal meine Version - Natürlich ungetestet.
Code:#include <stdio.h> #include <stdlib.h> int main(void) { int ch; unsigned int countA; unsigned int countE; unsigned int countI; unsigned int countO; unsigned int countU; while ((ch=getchar()) != EOF) { switch (ch) { case 'a': case 'A': ++countA; break; case 'e': case 'E': ++countE; break; case 'i': case 'I': ++countI; break; case 'o': case 'O': ++countO; break; case 'u': case 'U': ++countU; break; } } AnzahlVokale = AnzahlA + AnzahlE + AnzahlI + AnzahlO + AnzahlU; printf("Die Anzahl der Vokale ist: %d.\n\Davon sind es %d mal A, %d mal E, %d mal I, %d mal O, %d mal U.\n", AnzahlVokale, AnzahlA, AnzahlE, AnzahlI, AnzahlO, AnzahlU); return EXIT_SUCCESS; }
Unnötig ist sie eben nicht weil das vom "Kunden" also Ausbilder gewünscht war
oh und du hast weder AnzahlVokale noch AnzahlA etc. je deklariert