zahlen stat zeichen



  • das umwandeln von text nach int geschieht normalerweise mit den funktionen sscanf(), strtod() oder atoi(). wie man das in deinem fall genau macht hängt davon ab, wie die syntax der eingelesenen zeilen aussieht.

    ich würde dir aber abraten, telefonnummern nach int zu konvertieren. wenn die telefonnummer länger als 9 ziffern ist klappt das nämlich nicht mehr, weil ints nur von ca -2 milliarden bis +2 milliarden gehen. außerdem geht dann auch kein schrägstrich oder leerzeichen zwischen telefonnummer und vorwahl mehr. und addieren und subtrahieren mußt du telefonnummern ja auch nicht. besser, du speicherst telefonnummern in einem textfeld, etwa char telefonnummer[20].



  • erstmal danke,

    ich bin noch ein dau,
    1.erste frage wie weise ich atoi eine feste zahl zu(nicht mehr also 9 🙂 ),
    2 ich das beispiel versucht erstmal so einzu bauen aber er will dann das "strlen" nicht mehr

    hätte ihr ein bespiel für feste zahlen?



  • das mit den strlen war ein fehler im windows unter linux macht er es.

    ich habs jetzt mal mit der anleitung versucht aber sucht nicht in der datei der wert ist immer der gleiche,auch bei unterschiedlich datein

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() 
    {
    
      FILE *q, *z;;
      q = fopen("test", "r");
      z = fopen("test2.c", "w");
    
      if(q == NULL || z == NULL)
      {
         printf("Fehler beim Auslesen\n");
         return 1;
      }
      int i;
      char szInput [4096], *p;
      printf ("Enter a number: ");
      gets ( szInput ) ;
      i = atoi (szInput);
      int zeilen=0, zeichen=0;
    
      while( !feof( q ) ) {    
        fgets( szInput, sizeof(szInput), q ); //Zeilen einzeln lesen + länge
        if ( feof( q ) ) // bei End of File (eof) abbrechen (break)
        break;
    
        zeichen+=strlen(szInput); //Zeichen Addieren bis zu Ende der Zeile
        zeilen++; // Zeilen hochrechnen
    
        }
    
         fprintf(z,"Zeilen=%d", szInput); //ausgeben (Ergebnis in Varialbe "zeilen")
       fclose(q);
       fclose(z);
    }
    

    die ausgabe ist immer Zeilen=-1073749680 😕



  • szInput ist ja auch kein Integer-Wert 😉 Was genau willst du denn erreichen?



  • also wie schon beischrieben

    es sollen aus einen text die tel.nr zählt werden

    das am ende ich ein einer ander datei" xxxx rufte %d mal an"

    die nr wollte ich fest vorgeben.

    edit on
    das problem ist ja das ich es mit zahlen nicht hin bekommen
    edit off



  • Wenn ich mir deinen Quelltext so ansehe, dürfte am Ende in "zeichen" die Gesamtgröße der eingegebenen Datei stehen, in "zeilen" die Zeilen der Datei und in szInput die letzte Zeile, soweit richtig?

    Was steht denn in deiner Datei drin? Und welche Zahl genau willst du am Ende ausgeben?



  • CStoll schrieb:

    Wenn ich mir deinen Quelltext so ansehe, dürfte am Ende in "zeichen" die Gesamtgröße der eingegebenen Datei stehen, in "zeilen" die Zeilen der Datei und in szInput die letzte Zeile, soweit richtig?

    Was steht denn in deiner Datei drin? Und welche Zahl genau willst du am Ende ausgeben?

    fast,raus kommen tut ja immer das gleiche.egal welche datei
    die ausgabe ist immer Zeilen=-1073749680 😕

    im text stehen nr.

    09900/55555
    09999/44444
    00000/55555
    (bespiel nr.,text wäre viel länger)

    ich will jetzt wissen wie oft zb die nr 55555,44444 usw.
    wenn ich es dann in die datei schreibe kann ich ja denn namen davor setzten.



  • in C++ könntest du z.B. eine map<string,int> verwenden, um die einzelnen Telefonnummern durchzuzählen, in C ist das etwas komplizierter.

    Und zu deiner Ausgabe: szInput ist ein Pointer, wenn der mit %d ausgegeben wird, erhältst du irgendwelchen Müll bzw. die Integer-Darstellung deiner Adresse. Du benötigst %s, um den in szInput gespeicherten Text auszugeben, oder eine int-Variable, in der du die richtige Nummer stehen hast.

    *startet einen Versuch - ohne Garantie*

    typedef struct
    {
      int anzahl;
      char nummer[20];
    }entry;
    
    //...
    entry vals[100];
    int last=-1;
    char input[20];
    while(!feof(q))
    {
      fgets(input,20,q);
      for(int i=0;i<=last;++i)
        if(strcmp(input,vals[i].nummer)==0) break;
      if(i>last)
      {
        last++;
        strcpy(vals[last].nummer,input);
      }
      vals[i].anzahl++;
    }
    for(int i=0;i<=last;++i)
      printf("Nummer %s wurde %dmal angerufen\n",vals[i].nummer,vals[i].anzahl);
    


  • erstmal danke für deine hilfe

    erwill das for nicht

    error: `for' loop initial declaration used outside C99 mode
    .c:44: error: `for' loop initial declaration used outside C99 mode
    

    c++ fand ich bis jetzt immer schwerer,
    deshalb wollte ich es in c machen.



  • fprintf(z,"Zeilen=%d", szInput); //ausgeben (Ergebnis in Varialbe "zeilen")
    

    Dann lies Dir die Zeile doch nochmal durch... Du schreibst im Kommentar 'Ergebnis in Variable "zeilen"', gibst aber was (!) als Zahl aus? Nicht die Variable "zeilen". Ich hoffe Du kommst jetzt von selbst drauf 😉



  • schawee schrieb:

    erwill das for nicht

    error: `for' loop initial declaration used outside C99 mode
    .c:44: error: `for' loop initial declaration used outside C99 mode
    

    Ups, kleine Verwechslung C/C++ meinerseits - in C müßtest du die Variable i vor der Schleife deklarieren.

    Ansonsten C++ ist um einiges leichter, weil dir die STL-Klassen viel Arbeit abnehmen können 😉



  • CStoll schrieb:

    schawee schrieb:

    erwill das for nicht

    error: `for' loop initial declaration used outside C99 mode
    .c:44: error: `for' loop initial declaration used outside C99 mode
    

    Ups, kleine Verwechslung C/C++ meinerseits - in C müßtest du die Variable i vor der Schleife deklarieren.

    Ansonsten C++ ist um einiges leichter, weil dir die STL-Klassen viel Arbeit abnehmen können 😉

    habs mittlerweil in c++ probier mit nicht mehr erfolg,aber die hoffung stribt nie und dümmer wird man auch nicht dabei.
    hier der link für c++ http://www.c-plusplus.net/forum/viewtopic-var-p-is-916846.html#916846 kannst ja mal darei schauen

    @LordJaxom,wenn nicht variabl würd ich mal auf contant tipen und auch testen 😃


Anmelden zum Antworten