Probleme bei der Anwendung von isdigit() in der Parameter Ü

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
nix_fix
Beiträge: 3
Registriert: Mi Jan 14, 2015 7:33 pm

Probleme bei der Anwendung von isdigit() in der Parameter Ü

Beitrag von nix_fix » Mi Jan 14, 2015 8:01 pm

Ersteinmal ein freundliches Hallo in die Runde.

Ich habe vor kurzem diese Seite und die Tutorials entdeckt und aufgrund meiner Vorkenntnis aus anderen Programmiersprachen fiel mir das Verständnis vieler Dinge leicht.
Nun habe ich allerdings ein kleines Problem bei der Parameter Übung.
Das Problem äußert sich darin, dass ich, aufgrund der Tatsache, dass char*argv[] , so wie ich es verstanden habe, auf eine Menge an char verweist (auch CSTRING), die Funktion isdigit() nicht anwenden kann.
Das Grundprinzip von isdigit() ist mir klar, jedes char des Strings muss einzeln überprüft werden.
Jedoch kommt es zu Problemen wenn ich z.B: char text[] = argv (i ist hier bei der string der beim Aufruf übergeben wird) definieren will.

Der Bisherige Quellcode sieht wie folgt aus:

Code: Alles auswählen

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

void substraction (int argc, char **argv) //Subtraktionsfkt. mit Ausgabe (es wird ein int und ein Zeiger übergeben)
 {
 int i=3;				  // Variabel Initialisierung ( hier wir 3 gewählt, da wir das 2. Element in sum direkt initialisieren )
 int sum = atoi(argv[2]);		  // Hier wird das 2 gewählt, weil das 3. Textarray ( 1. Zahl als Anfangspkt. für die Differenz erwählt wird )
 for(;i<argc;i++)			  // Substraktionsschleife
  sum=sum-atoi(argv[i]);		  //
 printf("Die Differenz lautet: %d\n",sum); // Ergebnisausgabe
 }

void add (int argc, char **argv) // Additionsfkt. mit Ausgabe ( es wird ein int und ein Zeiger übergeben)
 {
 int sum = 0;                    // Variablendeklaration + Initialisierung
 int i=2;
 for(;i<argc;i++)                // Zählschleife mit Start im 3. Speicherarray, da im 1. [0] Pfad liegt und im 2. [1] die Rechenart
  sum=sum+atoi(argv[i]);         // Aufsummierung der gültigen Argumente
 printf("Die Summe lautet: %d. \n",sum); // Ausgabe der Addition
 }

int main( int argc, char* argv [] )  // Main mit Übernahmefkt.
{
 if (argc < 4)				// Wächter, dafür da, dass die min. Zahl an Argumenten vorhanden ist.
 {
 printf("\n Es werden mindestens 3 Argumente erwartet.\n\n"); // Hilfetext
 return EXIT_SUCCESS;
 }
 if(strcmp (argv[1], "-addition") == 0) //Stringueberpruefung des 2.[1] Argumentes (Textarrays)
  add(argc, argv);                      // Fkt. Call
 else if (strcmp ( argv[1],"-substraction") == 0)  // Stringueberpruefung des 2. [1] Argumentes (Textarrays)
  substraction(argc,argv);		// Fkt. Call
 else					// wird gewählt wenn 1. Parameter falsch
  printf ("\n 1. Parameter inkorrekt.\n\n Moegliche Parameter: -addition ; -substraction\n -addition     addiert alle darauffolgenden mit Leertaste getrennten Ganzzahlen\n -substraction subtrahiert alle darauffolgenden mit Leertaste getrennten Ganzahlen von der 1. an\n\n");
 /*Erklärung im else als Hilfestellung für den Anwender.*/ 
 return EXIT_SUCCESS;
}
Wie gesagt, mir ist bewusst das *argv hier lediglich auf das übergebende Argument/String verweist, allerdings weiß ich nicht, wie ich den String char für char aufrufen kann.

Mit freundlichen Grüßen
nix_fix

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Probleme bei der Anwendung von isdigit() in der Paramete

Beitrag von Xin » Do Jan 15, 2015 12:19 am

nix_fix hat geschrieben:Ersteinmal ein freundliches Hallo in die Runde.
Ein freundliches Hallo zurück :-)
nix_fix hat geschrieben:Das Problem äußert sich darin, dass ich, aufgrund der Tatsache, dass char*argv[] , so wie ich es verstanden habe, auf eine Menge an char verweist (auch CSTRING), die Funktion isdigit() nicht anwenden kann.
char * argv[] ist ein Array ([]) auf Zeiger (*) auf einen (Anfangs-)Buchstaben (char).
nix_fix hat geschrieben:Das Grundprinzip von isdigit() ist mir klar, jedes char des Strings muss einzeln überprüft werden.
Jedoch kommt es zu Problemen wenn ich z.B: char text[] = argv (i ist hier bei der String der beim Aufruf übergeben wird) definieren will....
Wie gesagt, mir ist bewusst das *argv hier lediglich auf das übergebende Argument/String verweist, allerdings weiß ich nicht, wie ich den String char für char aufrufen kann.

Du machst eine Schleife und greifst Buchstabe für Buchstabe darauf zu.

Eine Schleife, um die Länge des Strings zu ermitteln findest Du hier: https://www.proggen.org/doku.php?id=c:tutorial:cstrings

Da kannst Du auch isdigit() für Deine Aufgabe einbauen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nix_fix
Beiträge: 3
Registriert: Mi Jan 14, 2015 7:33 pm

Re: Probleme bei der Anwendung von isdigit() in der Paramete

Beitrag von nix_fix » Do Jan 15, 2015 5:45 pm

Hallo Xin,

ich danke dir für den Tip :
char * argv[] ist ein Array ([]) auf Zeiger (*) auf einen (Anfangs-)Buchstaben (char).
Hatt mir den fehlenden Baustein für das Programm geliefert.

Auch die Zählschleife von hier https://www.proggen.org/doku.php?id=c:tutorial:cstrings war sehr hilfreich.

Und das mit dem Durchzahlen des Strings wurde ja hier https://www.proggen.org/doku.php?id=c:tutorial:pointer im
Kapitel "Verwandtschaft von Arrays und Zeigern" gut erklärt.

Programm funktioniert nun erfolgreich und es kann weitergehen mit dem Tutorial. :)

Mit freundlichen Grüßen
nix_fix

Antworten