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);
}
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
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”.
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
13148100cookie-checkWie liest man Zahlen als Befehlsargumente ein?yes
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