Wieso gehen die Zahlen nicht?



  • Wennze ganze Zahlen im String suchst, machst du so:

    #include <stdio.h> 
    
    int main (void)
    { 
    	int i = 0;
    	char line[BUFSIZ+1] = {0};
    	char* p = line;
    
    	puts("Welcome to Mr. C's decimal number analyzer.");
    	puts("Please enter a sentence: ");
    	fgets(line, sizeof(line), stdin);
    
    	while (*p)
    	{
    		if (*p >= '0' && *p <= '9')
    			printf("Number found: %lu\n", strtoul (p, &p, 10));
    		p++;
    	}
    	return 0;
    }
    

    MFG,
    Mr. C



  • Call me Mr. C schrieb:

    if(satz[i++] == 102 ) 
    		{
    			menge++; 
    			puts(" e gefunden!" );
    		}
    

    ähöm, 'e' == 101



  • Mr. D schrieb:

    ähöm, 'e' == 101

    tschtümmt. muss ich noch lernen, an den fingern abzuzählen!
    call you mr. ascii 🙂

    mfg
    mr. c



  • @monstermunchkin, aXYZn
    Was bringt mir strcmp, wenn ich nur einen String habe?

    @Call me Mr. C
    1. In meinem Code habe ich das, frag mich nicht warum ich es hier nicht habe 😃
    2. Fgets kenne ich noch nicht, aber es wird bestimmt nicht schaden, wenn du mir erklärst, was da genau anders ist bzw. wie das funktioniert.
    3. Ja das wollte ich später noch ändern, aber dann wollte ich double nehmen.
    4. Stimmt das ist logisch, aber in meinem Buch steht das immer so, deswegen habe ich das so gemacht. Warum hat main denn eigentlich den Rückgabetyp int?
    5. Ich kenne bisher noch nichts anderes.

    Das weiß ich auch, aber dann zählt er eben nicht die Zahl 101, sondern e.
    Ich will aber, dass er die Zahl zählt.
    (Um den eigentlichen Sinn des Programms geht es nicht mehr)
    btw: puts kenne ich noch nicht.

    @Mr. C
    Hm, weil ich ja noch Anfänger in C bin und deswegen noch nicht alles kenne, habe ich noch Probleme mit deinem Code.

    @all

    Mir geht es nicht wirklich darum jetzt den richtigen Quelltext zum Zählen der Zahlen im String zu haben, sondern darum zu verstehen warum das Programm, wenn ich z.B. '2' hinschreibe, die 2 im String findet und zählt, aber, wenn ich '50' hinschreibe mein Compiler sagt:

    12:37 [Warning] multi-character character constant in function `main':
    12 [Warning] comparison is always false due to limited range of data type

    Also meine Methode scheint ja teils zu klappen, aber warum nicht bei höheren Werten?
    --> Verständnisfrage

    Danke schonmal für die vorherigen Posts u. Tipps.



  • Mr.Tactic schrieb:

    @monstermunchkin, aXYZn
    Was bringt mir strcmp, wenn ich nur einen String habe?

    Hast Recht. War ne blöde Idee, sorry.

    Mr.Tactic schrieb:

    Mir geht es nicht wirklich darum jetzt den richtigen Quelltext zum Zählen der Zahlen im String zu haben, sondern darum zu verstehen warum das Programm, wenn ich z.B. '2' hinschreibe, die 2 im String findet und zählt, aber, wenn ich '50' hinschreibe mein Compiler sagt:

    Du kannst 'a', 'b', '!', '0' etc. schreiben, aber nicht '50', da '50' kein einzelnes Zeichen ist.
    Vielleicht kannst du hiermit was anfangen: http://openbook.galileocomputing.de/c_von_a_bis_z/c_007_007.htm#RxxobKap0070070400263C1F01E18C

    Mr.Tactic schrieb:

    Das weiß ich auch, aber dann zählt er eben nicht die Zahl 101, sondern e.
    Ich will aber, dass er die Zahl zählt.

    Am Besten du nimmst die strtoul-Funktion, welche Mr. C vorgeschlagen hatte.
    http://www.cplusplus.com/reference/clibrary/cstdlib/strtoul/



  • Mr.Tactic schrieb:

    ...
    Mir geht es nicht wirklich darum jetzt den richtigen Quelltext zum Zählen der Zahlen im String zu haben, sondern darum zu verstehen warum das Programm, wenn ich z.B. '2' hinschreibe, die 2 im String findet und zählt, aber, wenn ich '50' hinschreibe mein Compiler sagt:

    12:37 [Warning] multi-character character constant in function `main':
    12 [Warning] comparison is always false due to limited range of data type

    Also meine Methode scheint ja teils zu klappen, aber warum nicht bei höheren Werten?
    --> Verständnisfrage
    Danke schonmal für die vorherigen Posts u. Tipps.

    poste mal die betreffenden codezeilen.



  • monstermunchkin schrieb:

    Du kannst 'a', 'b', '!', '0' etc. schreiben, aber nicht '50', da '50' kein einzelnes Zeichen ist.
    Vielleicht kannst du hiermit was anfangen: http://openbook.galileocomputing.de/c_von_a_bis_z/c_007_007.htm#RxxobKap0070070400263C1F01E18C

    Sry, aber das verstehe ich nciht richtig. Kannst du das evtl. nochmal anders erklären?

    @all(Komiker 😃 )
    Die Zahlen vor den Warnings sind die Zeilen.



  • Okay, ich versuchs mal:

    Der Wertebereich eines Characters geht von -128 bis 127 (signed) oder 0 bis 255 (unsigned). Jeder Wert dieses Wertebereichs stellt außerdem ein einzelnes Zeichen aus der ASCII Tabelle dar, z.B. 'e' == 101.
    Das heißt zugleich, dass es nicht richtig ist '50' zu schreiben, da dies kein einzelnes Zeichen ist. '2' jedoch, wäre vollkommen korrekt.

    char x = '50';
    

    ... ist somit schlichtweg falsch.

    Ich hoffe das war jetzt etwas verständlicher 😉



  • Dein Text halt mir zwar nur so geholfen, indem ich dadurch einen Gedankenblitz bekommen habe, aber egal.
    Also geht '50' nicht, weil 50 kein Zeichen in der ASCII- Tabelle darstellt, jetzt kapier ich es.

    Vielen Dank 🙂



  • Mr.Tactic schrieb:

    #include <stdio.h>
    #include <string.h>
    
    main(){
           char satz[80];
           int i=0,menge;
           printf("\n\tBuchstabenvorkommen ermitteln\n");
           printf("\nBitte einen Satz eingeben\n>");
           gets(satz);
           while(satz[i]){
                          if(satz[i++]=='e')
                          menge++;
                          }
           printf("\n\nMenge der e's : %i\n",menge);       
           printf("Menge aller Zeichen : %i\n",strlen(satz));
           printf("Prztl. Anteil des Buchstaben e : %i %%\n\n\n\n",menge*100/strlen(satz));
           
      
      system("PAUSE");	
    }
    

    lg

    villt. bin ich ungebildet aber ich glaube du musst fgets(satz, 100, stdin); schreiben...


Anmelden zum Antworten