Der schlaue Fragen Thread

    • Gut, dann kann ich meinen Code so lassen. Macht auch irgendwie Sinn bei Listen. Bei Mengen wäre das wahrscheinlich random.

      Heinrich von Kleist schrieb:

      [...] [D]u hast an mir getan, [...] was in Kräften [...] eines Menschen stand, um mich zu retten: Die Wahrheit ist, daß mich auf Erden nicht zu helfen war.
    • #doppelpost:

      Hab ne Frage zu C:

      C-Quellcode

      1. if (isdigit(*argv[i]) || *argv[i] == '-'){
      2. miwe += atof(argv[i]);
      3. } else {
      4. printf("Only digits are allowed as argument! The non-digit Input will be ignored \n");
      5. invalidArgs++;
      6. }


      möchte überprüfen, ob der input, der beim aufruf mit übergeben wird, eine gültige Zahl ist.
      mit der bisherigen abfrage hab ich 0-9 und -durch das '-' auch negative zahlen drin.

      Problem ist, das dann auch Sachen wie -b durch die Abfrage kommen.

      Eine Möglichkeit, die mir gerade eingefallen ist, wäre die Abfrage so abzuändern

      Quellcode

      1. if (isdigit(*argv[i]) || *argv[i] == '-' && atof(argv[i]) != -0){

      -0 damit nicht mehr valid, aber damit könnte ich leben.
      Hat jemand eine bessere Idee?

      PS: bin noch C nub
      "I'd only suggest that you try to understand other people. Try to learn empathy"
    • Konnte damit immerhin etwas verkürzen, aber nur mit dem !isalpha() ist -b auch zulässig.
      Schaut jetzt so aus

      C-Quellcode

      1. if (!isalpha(*argv[i]) && atof(argv[i]) != -0){
      he, gerade gemerkt, dass so auch '0' und nicht nut '-0' ignoriert wird. Ist dann schon weniger schön.
      "I'd only suggest that you try to understand other people. Try to learn empathy"
    • @Aro : Willst du auf Zahlen oder auf einzelne Ziffern testen? Auch Floats (weil atof statt atoi)?

      Du schreibst ja du willst prüfen ob der Input ne gültige Zahl ist. Würde mir dafür ne Funktion "isNumber" schreiben und die einfach verwenden. Mein Beispiel ist jetzt man nur für ints. Für floats musst du halt noch optional auf den Punkt/das Komma prüfen.

      C-Quellcode

      1. bool isNumber(char number[])
      2. {
      3. int i = 0;
      4. if (number[0] == '-')
      5. i = 1;
      6. for (; number[i] != '\0'; i++)
      7. if (!isdigit(number[i]))
      8. return false;
      9. return true;
      10. }

      isDigit prüft ja nur ein Zeichen.

      Oder versteh ich ich was falsch?

      Habs btw nicht compiled. C strings sind 0-terminiert. Bin mir grad aber nicht mehr sicher ob dafür die Notation 0 oder \0 war. War ja früher auch auf dem ANSI C tripp aber C++ find ich mittlerweile einfach angenehmer zu schreiben. Da würd ich jetzt nämlich Commandlineparsing über Regex machen.
      There are 10 types of people - those who understand binary, and those who don't.

      Beitrag von südländer ()

      Dieser Beitrag wurde von ramius gelöscht ().
    • watnuss schrieb:

      @Aro : Willst du auf Zahlen oder auf einzelne Ziffern testen? Auch Floats (weil atof statt atoi)?

      Du schreibst ja du willst prüfen ob der Input ne gültige Zahl ist. Würde mir dafür ne Funktion "isNumber" schreiben und die einfach verwenden. Mein Beispiel ist jetzt man nur für ints. Für floats musst du halt noch optional auf den Punkt/das Komma prüfen.

      C-Quellcode

      1. bool isNumber(char number[])
      2. {
      3. int i = 0;
      4. if (number[0] == '-')
      5. i = 1;
      6. for (; number[i] != '\0'; i++)
      7. if (!isdigit(number[i]))
      8. return false;
      9. return true;
      10. }

      isDigit prüft ja nur ein Zeichen.

      Oder versteh ich ich was falsch?

      Habs btw nicht compiled. C strings sind 0-terminiert. Bin mir grad aber nicht mehr sicher ob dafür die Notation 0 oder \0 war. War ja früher auch auf dem ANSI C tripp aber C++ find ich mittlerweile einfach angenehmer zu schreiben. Da würd ich jetzt nämlich Commandlineparsing über Regex machen.
      Wie gesagt, bin noch Anfänger in C.
      In dem Array handelt es sich afaik auf ein Pointer array
      int main(int argc, char *argv[])

      Aufruf von printf("char array %s \n",argv[i]); zeigt mir eben dann die werte an, an die die Pointer zeigen (oder?).
      Sprich ruf ich das Programm mit den Argumenten 4.0 -3 a 2.3 aus, werden mir diese genau so wiedergegeben.
      (Hab den C-Crash-Kurs in der ersten Stunde verpasst :whistling: ).
      Ich poste einfach mal den ganzen Code, dann ist es vielleicht verständlicher.

      Spoiler anzeigen


      C-Quellcode: miwe.c

      1. #include <stdio.h> // binde Deklarationen ein (I/O)
      2. #include <stdlib.h>
      3. #include <ctype.h>
      4. #include <math.h>
      5. bool isNumber (char argv[]);
      6. int main(int argc, char *argv[]){
      7. //Ueberpruefung, ob Argumente uebergeben wurden
      8. if (argc <= 1) {
      9. printf("No arguments given! \n");
      10. } else {
      11. double miwe = 0;
      12. int invalidArgs = 1;
      13. //summierung der einzelnen Elemnte von argv
      14. for(int i=1; i<argc; i++){
      15. printf("char array %s \n",argv[i]);
      16. if (isdigit(*argv[i]) || *argv[i] == '-' && atof(argv[i]) != -0){
      17. miwe += atof(argv[i]);
      18. } else {
      19. printf("Only digits are allowed as argument!\tThe non-digit Input '%s' will be ignored\n", argv[i]);
      20. invalidArgs++;
      21. }
      22. }
      23. //Berechnung des Mittelwertes
      24. miwe /= argc-invalidArgs;
      25. //Ausgabe
      26. if (isnan(miwe)){
      27. printf("No valid arguments \n");
      28. } else {
      29. printf("mean value is: %f \n", miwe);
      30. }
      31. }
      32. return 0; // melde dem Betriebsystem Erfolg
      33. }
      Alles anzeigen
      €: z. 20 war nur testweise drin, hat so keinen sinn^^
      "I'd only suggest that you try to understand other people. Try to learn empathy"

      Beitrag von Oster ()

      Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Hat sich erledigt :) ().
    • Benutzer online 6

      6 Besucher