Wie liest man Zahlen als Befehlsargumente ein?

Lesezeit: 4 Minuten

Benutzer-Avatar
Kaity

Wie kann man es schaffen, dass das Programm zwei beliebige Ganzzahlen liest, bevor das Programm ausgeführt wird? Ich möchte, dass die Ausgabe so aussieht, wobei x und y beliebige eingegebene Variablen sind (ich verwende Cygwin):

$ ./axy

Produkt von x und y

Summe von x und y

ich benutzte int main(int argc, char *argv[]). Ich habe versucht zuzuordnen argv[2] zu x und argv[3] zu y, aber wenn ich das Programm kompiliere, heißt es, dass die Zuweisung eine ganze Zahl aus einem Zeiger ohne Umwandlung macht. Was bedeutet das und wie kann ich es beheben?

  • Enthält Ihr Lehrbuch keine Beispiele zur Verwendung von Befehlsargumenten?

    – mmcdole

    7. Februar 2009 um 6:05 Uhr

  • Ich verwende C-Sprache. Wir haben nur die ersten drei Kapitel des Buches behandelt, und das Kapitel dafür ist zur Hälfte fertig und ist für mich totales Kauderwelsch. Der Lehrer hat dies abgedeckt, als ich abwesend war, also bin ich ahnungslos!

    – Kaity

    7. Februar 2009 um 7:24 Uhr

  • Warum hast du 2 Themen zum gleichen Thema eröffnet? Bitte schließen Sie eins.

    – qrdl

    7. Februar 2009 um 13:05 Uhr

  • zum Update: Könntest du bitte deinen Code posten. Wenn Sie sich mein Beispiel unten ansehen, wird es für mich in gcc ohne Fehler oder Warnungen kompiliert. Teilen Sie uns bitte auch mit, welchen Compiler Sie verwenden. Vielen Dank.

    – Mike

    7. Februar 2009 um 16:37 Uhr

Unter der Annahme der C-Sprache:

  • Befehlszeilenargumente befinden sich im argv-Array – argv[1]argv[2] usw.
  • Das Konvertieren eines String-Arguments in eine Ganzzahl kann mit der Funktion atoi erfolgen.
  • Die Ausgabe kann mit der printf-Funktion erfolgen.

[Trying to teach you to fish, rather than providing a fish. Good luck!]

  • Früher wusste ich, wie man fischt, aber ich habe es vergessen. Lieber erinnert als bevormundet.

    – jwg

    9. Juli 2018 um 10:59 Uhr

Angenommen, Sie verwenden Bash, können Sie $1, $2 usw. für diese Argumente verwenden. Wenn Sie jedoch C verwenden, sollte Ihr Code eher so aussehen:

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

main(int argc, char *argv[]) {
    if(argc<=1) {
        printf("You did not feed me arguments, I will die now :( ...");
        exit(1);
     }  //otherwise continue on our merry way....
     int arg1 = atoi(argv[1]);  //argv[0] is the program name
                                //atoi = ascii to int
     //Lets get a-crackin!
 }

Hoffe das hilft.

Erstens, wenn Sie Ihr C-Programm als ausführen

./axy

dann ist a argv[0]x ist argv[1]und y ist argv[2]da C-Arrays 0-basiert sind (d. h. das erste Element im Array wird mit 0 indiziert.

Beachten Sie, dass argv ein Array (oder ich habe es immer als einen ARGument-Vektor betrachtet, obwohl Sie es sich vielleicht als ein Array von ARGument-Werten vorstellen) von Zeichenkettenzeigern ist. Sie müssen also die Zeichenfolgen in Ganzzahlen konvertieren. Glücklicherweise verfügt C über Bibliotheksfunktionen, um ASCII in Integer umzuwandeln. Sehen Sie sich die stdlib.h-Dokumentation an.

Viel Glück!

Mein Code würde so aussehen.

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

int main(int argc, char *argv[])
{
    // argc is number of arguments given including a.out in command line
    // argv is a list of string containing command line arguments
    int total = 0;
    int i;
    char *value;
    for(i = 1; i < argc; i++)
    {
        // The integers given is read as (char *)
        value = argv[i];
        printf("Command line index: %d value: %s in ascii: %d\n", i, value, *value);

        // Convert ascii to integer.
        // atoi function is defined in stdlib.h
        total += atoi(value);
    }
    // .2f limits the decimals to two digits after '.'
    printf("Total of given integers is %d\n", total);
}

Geben Sie hier die Bildbeschreibung ein

Benutzer-Avatar
Jaideep Jagyasi

int arg1 = argv[1];

Funktioniert nicht, da es sich um ein Array von Zeigern handelt, das alle Adressen von enthält argv[0]....argv[n] um den Wert zu bekommen argv[..] vermuten argv[1] Du musst schreiben:

int n=*argv[1]-'0'; // Direct atoi 

Benutzer-Avatar
Dharman

Durch die einfache Verwendung von atoi() wird die Konsoleneingabe vom Typ char in int konvertiert

   int main(argc, char* argv[])
   {
      int first = atoi(argv[1]);
      printf("%i", first);
   }

Wenn Sie fragen, warum argv[1] stattdessen argv[0]die Antwort ist das allererste Argument ist der Name Ihrer ausführbaren Datei ./some 2 int this case argv[0] zeigt auf “einige”.

Benutzer-Avatar
mattsap

In Befehlszeilenargumenten ist char*argv[] ist String-Typ. Wir müssen es in ganze Zahlen umwandeln. Wir tun dies durch Typumwandlung, aber in oop tun wir dies durch die Atoi-Funktion (Methode), es funktioniert wie Typumwandlung (bedeutet Methode zum Konvertieren eines Datentyps in einen anderen).

  • Zeichen* argv[] ist char Zeiger Zeiger – hier ist es ein char * Array und kein String-Typ.

    – mattsap

    11. Mai 2016 um 20:38 Uhr

  • Es gibt keine String-Typen in C, im Grunde sind Strings Char-Arrays -Arrays von Zeichen char[]

    – Denise Ignatowa

    5. August 2021 um 6:50 Uhr


1314810cookie-checkWie liest man Zahlen als Befehlsargumente ein?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy