kleines Prob mit string



  • ich habe volgendes problem:
    1. ich möchte einen text einlesen
    2. einen Buchstaben einlesen
    3. schauen wie oft der Buchstabe vorkommt...

    und da hab ich beim scanf vom buchstaben ein problem: er wird einfach übersprungen!... hier mal der quelltext:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h> //ev unötig ;)
    
    char txt[30];
    char b;
    int x=0;
    
    main()
     {
      printf("Geben Sie einen Text ein () Zeichen:\n");
      scanf("%s",&txt[0]);
      printf("test txt: %s\n",txt);
    
      printf("Geben Sie einen Buchstabenb den Sie suchen moechten ein:\n");
      scanf("%c", &b);    //dieser schritt wird uebersprungen
      printf("\nTest b:%c\n",b);
    
      system("PAUSE");
      return 0;
     }
    

    man soll mal zeuerst das problem mit dem überspringen des scanf bearbeiten und nicht wie das andere mit dem zähler geht....



  • Das hat nichts mit dem String zu tun - da steht einfach nach dem ersten scanf noch etwas im Eingabepuffer. (und hier findest du schon genug Threads, die sich mit dem Auskehren des Puffers beschäftigen)



  • nach jedem scanf() ein

    while(getchar()!='\n');
    


  • ???

    ich hab einfach ein

    fflush(stdin);
    

    reingetan...
    hm geht jetzt auch

    gut aber jetzt habe ich nach dem buchstaben gesucht wird ein kleines problem: es endet das wort nach einem leerschlag:

    while(!txt[x]=='\0'){
    
          /*Kontrollieren ob Buchstabe an stelle gleich gesuchter Buchstabe*/
          if(b==txt[x]){
              z++;      //Den Zaeler um 1 erhoehen
          }
          x++;
      }
    


  • @Sandmaster: Dies liegt an scanf(), welches nur bis zum nächsten Blank ließt. Wenn du eine Zeile einlesen willst, musst du (iirc) fgets() nehmen.

    Gruß Caipi



  • danke... hm ich hätte das doch nehmen sollen, ich hab das einfach mal gesehen auf : http://www.pronix.de/pronix-736.html



  • So wie du fflush() verwendest, führt das zu undefiniertem Verhalten!
    Nimm lieber das, was ich oben geschrieben habe.


Anmelden zum Antworten