Und wieder 'ne C spezifische Frage

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • ja hier

      edit: etwas ausführlicher(weil mir fad ist^^): das ist natürlich kein google link. Dort findest du zahlreiche Methoden. Du musst include <wchar.h> machen, danach kannst du die methode iswdigit(); aufrufen. Als Parameter erwartet es etwas vom typ wint_t(ist wohl ein "breites zeichen").

      naja, ich hoffe das stimmt soweit, kenn mich ja in C nicht wirklich aus :<
      (aber normalerweise gibt es für solche sachen methoden)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Sekkiy ()

      Every base is base 10.
    • in <ctype.h> steht aber int isdigit(int c);... das versteh ich nicht, ich übergeb der methode einen integer, und es schaut obs eine zahl is? wtf
      deswegen hab ich <wchar.h hingeschrieben

      edit: gibts hier eig. +1? :D glaub aber nicht...
      Every base is base 10.
    • bitte formuliere deine aufgabenstellung genauer, dann kann ich dir sogar den code posten.
      da ich mich mit der <ctype.h> net auskenne, schreibe ichs dir mal in standard 90er C.
      aber soweit ich es verstanden habe:
      du hast n char array in dem n string steht. in dem string stehen nur ascii/ansii zeichen. dieser ist nullterminiert (das ist wichtig!). und du willst wissen ob der string nur aus ziffern besteht.
      das würde ich so lösen:
      // program start
      int stringCheck(char* string) //du übergibst deinen string an die funktion
      {
      int counter = 0;
      int check = 0; // return variable

      while(string[counter] != '\0') // schleife bis das zu überprüfende zeichen des strings der nullterminierer ist
      {
      if ((string[counter] < 48) || (string[counter] > 57))
      // hier überprüfen ob der string inhalt dem wert einer ziffer entspricht (0-9)
      // ein char ist an sich auch nur ne zahl von 0 bis 257 oder -128 bis 127 wobei 48-57 den ziffern entsprechen
      // epinasoft.com/delphikurs/img/asciitab.gif
      {
      int check = 1;
      break; // schleifenunterbrechung falls ein zeichen keine ziffer ist
      }
      counter++;
      }
      return check;
      }
      // program end
      du übergibst der funktion den string, die schleife überprüft jedes einzelne char obs den wert einer ziffer hat
      und returned 1 wenns eine nicht ziffer enthält, oder 0 wenn der string nur aus ziffern besteht.

      das ganze geht mit isdigit() wahrsch einfacher aber ich kenn mich mit dem net so gut aus,
      könnte es aber in erfahrung bringen wenn du willst, einfach pn an mich, ich mach das gerne.
      bei sonstigen fragen kannst mich auch kontaktieren ^^

      mfg david aka skull
    • danke erstmal.
      ich versuch mal, mein problem etwas genauer zu erläutern. ich muss ein kosolenprogramm mit parametern schreiben... also aufruf mit zb. -t <zahl>
      jetzt such ich halt nach einer möglichkeit zu überprüfen, ob der string nach "-t" auch wirklich eine zahl ist, um eine eventuelle falsche eingabe abzufangen.

      hab dein code jetzt mal versucht umzusetzen:

      C-Quellcode

      1. #include <stdio.h>
      2. #include <conio.h>
      3. #include <string.h>
      4. int stringchk(char *string);
      5. main()
      6. {
      7. char test[]="12gsgds34";
      8. printf("%d", stringchk(test));
      9. getch();
      10. }
      11. int stringchk(char *string)
      12. {
      13. int counter = 0;
      14. int check = 0;
      15. while(string[counter] != '\0') // schleife bis das zu überprüfende zeichen des strings der nullterminierer ist
      16. {
      17. if ((string[counter] < 48) || (string[counter] > 57)){
      18. int check = 1;
      19. break;
      20. }
      21. counter++;
      22. }
      23. return check;
      24. }
      Alles anzeigen


      nur leider gibt er immer 0 zurück^^ egal ob im string "1234" "faf" oder "53d4\0" oder sonst was... returnwert ist immer 0
    • #include <stdio.h>
      // #include <conio.h> net verwenden, erklärung unten
      #include <string.h>

      int stringchk(char *string);

      int main() // vor das main gehört int
      {
      char test[] = "1234";
      printf("%d", stringchk(test));
      /*getch() verweis: <conio.h>*/;
      return 0; // die main ist IMMER ne int und braucht deshalb nen return wert
      }

      int stringchk(char *string)
      {
      int counter = 0;
      int check = 0;

      while(string[counter] != '\0') // schleife bis das zu überprüfende zeichen des strings der nullterminierer ist
      {
      if ((string[counter] < 48) || (string[counter] > 57))
      {
      /*int <- das gehört da natürlich net rein*/ check = 1;
      break;
      }
      counter++;
      }
      return check;
      } // am ende gehört ne newline

      conio.h würd ich niemals verwenden weils ne ms dos library is, ergo keine linux maschine das versteht. ich weiß nicht für wen du das machst, aber wird wahrsch auch net erlaubt sein
      ich weiß net mit welchem compiler du kompilierst, aber ich tät ihn wechseln, am besten zum "gcc" von linux, 2t bester compiler der welt. als ich den ursprünglichen code durchlaufen hab lassen hat der mir schon gesagt wo meine fehler sind.

      ad program: ich gehe davon aus dass der programaufruf aus ""filename" -t "zahl"" und sonst nichts bestehen soll
      die int main hat standardmmäßig 2 übergabewerte was die meisten nicht wissen, argc und argv
      argc is ne integer mit der zahl wieviele parameter du übergeben hast. argv is n char** (pointer pointer oder auch pointer auf arrays) wo alle strings die als parameter eingelesen wurden drinstehen.
      kleines code bsp wieder:
      int main(int argc, char** argv)
      {
      char* num_string = NULL;

      if(argc != 3) // 1) filename 2) -t 3) zahl
      {
      printf("too many or too less parameters");
      return 0;
      }
      num_string = argv[2]; // argv[2] is der string mit dem 3ten parameter

      printf("%s\n", num_string);

      return 0;
      }

      hoffe das hilft weiter
      nebenbei: nimm am besten zum programmieren "notepad++", das isn super program, kannst oben die language einstellen und der makiert dir schön was was is

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DwN]Skull ()

    • nur so nebenbei:
      wenn du <ctype.h> includest, dann kannst du
      "(string[counter] < 48) || (string[counter] > 57)"
      ersetzen durch
      "!(isdigit(string[counter]))"
      und es funktioniert auch.

      erklräung: isdigit returned non-zero wenns zwischn 0 und 9 ist, ergo muss man in der if() ein '!', ein not einbauen
      vorteil: verständlich (lässt sich durch comment auch erreichen), kürzer
      nachteil: deutlich längere laufzeit, und bei besonderen eingaben (sonderzeichen etc) oft fehler

      ich würds net verwenden!!!!!!!!!!

      @ BaRtiMaeUs

      ein string ist eine zeichenfolge, wo an jeder speicherstelle hintereinander ein zeichen steht (muss nicht unbedingt ein char sein!), und wird aufgerufen mit nem pointer (zu deutsch zeiger) auf das erste zeichen und das program weiß dass die restlichen dahinter stehen

      € @ Seren

      ich hatte die nacht davor 3h geschlafen also war ich um 24h schon ein wenig fertig, sowas passiert mir normal net ^^
    • DwN]Skull schrieb:

      ein string ist eine zeichenfolge, wo an jeder speicherstelle hintereinander ein zeichen steht (muss nicht unbedingt ein char sein!), und wird aufgerufen mit nem pointer (zu deutsch zeiger) auf das erste zeichen und das program weiß dass die restlichen dahinter stehen


      danke aber wofür verwendet man sowas?
    • BaRtiMaeUs schrieb:

      DwN]Skull schrieb:

      ein string ist eine zeichenfolge, wo an jeder speicherstelle hintereinander ein zeichen steht (muss nicht unbedingt ein char sein!), und wird aufgerufen mit nem pointer (zu deutsch zeiger) auf das erste zeichen und das program weiß dass die restlichen dahinter stehen


      danke aber wofür verwendet man sowas?

      geh einfach zurück in deine trollhöhle.

      oder google informatik

      @skull: reagier nicht auf soetwas. das ist entweder ein troll oder eine art mensch deren charakterzüge ich gar nicht zu beschreiben fähig bin
    • Seren schrieb:

      BaRtiMaeUs schrieb:

      DwN]Skull schrieb:

      ein string ist eine zeichenfolge, wo an jeder speicherstelle hintereinander ein zeichen steht (muss nicht unbedingt ein char sein!), und wird aufgerufen mit nem pointer (zu deutsch zeiger) auf das erste zeichen und das program weiß dass die restlichen dahinter stehen


      danke aber wofür verwendet man sowas?

      geh einfach zurück in deine trollhöhle.

      oder google informatik

      @skull: reagier nicht auf soetwas. das ist entweder ein troll oder eine art mensch deren charakterzüge ich gar nicht zu beschreiben fähig bin

      warum bin ich ein troll wenn ich etwas wissen möchte?
    • hey danke für die umfangreichen antworten.

      conio benutz ich für getch(), da mir kein äquivalenter befehl bekannt ist (bsp. "beenden mit beliebiger taste" -> getch)
      das wurde uns auch so gezeigt, also keine ahnung ob es die leute (uni) stören wird. ich benutz ms visual studio unter win logischerweise

      das mit argc und argv ist mir bekannt und ich benutz es auch schon, trotzdem danke :)

      hab es vorhin, weil mir in der vorlesung langweilig war, selber nochmal auf eine andere art probiert

      Quellcode

      1. int stringchk(char a[]) {
      2. int pos = strspn(a, "0123456789");
      3. int laenge;
      4. laenge = strlen(a);
      5. if(pos >= laenge)
      6. return 0;
      7. else return 1;
      8. }
      Alles anzeigen


      bestimmt etwas umständlich, aber es funktioniert auch :>

      ich würde evtl später noch mal ein paar fragen stelle, du scheinst ja doch schon etwas mehr ahnung zu haben :)
      mfg