Ich habe Probleme herauszufinden, wie dieser Code funktioniert. Was angenommen wird, hängt von den Argumenten ab, die von der Befehlszeile ausgehen, es wird angenommen, dass eine Begrüßung ausgedruckt wird.Befehlszeilenargument
int main (int argc, char *argv[]) {
double testscore;
if (argc == 2) {
printf("Hello, Mr.%s.\n", argv[1]);
}
else if (argc == 3 && argc == testscore) {
testscore = atof(argv[2]);
printf("Hi, Mr.%s, your score is %.1f\n", argv[1], testscore);
}
else {
printf("My name is %s %s.\n", argv[1], argv[2]);
}
}
Wenn jemand nur den Nachnamen setzt, dann wird das Terminal auszudrucken ...
Hallo, Mr. last_name
..., weil sie nur in einem setzen Streit. Das funktioniert gut.
Der Teil, auf dem ich feststecke, ist, wenn die angegebenen Befehlszeilenargumente == 3
sind. Wenn drei Argumente werden dann gegeben entweder das Endgerät annehmen auszudrucken ...
Hallo, Mr. last_name, Ihr Test-Ergebnis ist test_score
... oder ...
Mein Name ist first_name last_name.
Stecke ich in den Befehlszeilenargumenten nur der Nachname und Test-Ergebnis (Smith 3.4) dann ausdruckt (zB mit dem Nachnamen Smith) dann druckt ...
Mein Name ist Smith 3.4
Allerdings funktioniert es für die Eingabe in den Vor- und Nachnamen (John Smith). Dies ergibt ...
Mein Name ist John Smith.
Ich will nicht die Antwort, ich will nur, was ich falsch und Hinweise tue, wie man es beheben.
"Beginnend mit C++" von Tony Gaddis, nicht wahr? Wie auch immer, danke, dass Sie nicht direkt nach Code gefragt haben. Es ist selten unter Neulingen. – CodeMouse92
Dies ist ein einfacher Tippfehler. Sie testen 'argc == testscore', das ** die Anzahl der Argumente ** gegen die Punktzahl testet. Daher wird die zweite Bedingung niemals als wahr gewertet (außer durch irgendeinen seltsamen Zufall). – CodeMouse92
'testscore' ist nicht initialisiert, Sie können es also nicht sinnvoll vergleichen, bevor Sie es setzen. Sie sollten wahrscheinlich versuchen, 'argv [2]' mit 'atof()' zu konvertieren ('strtod()' wäre besser - aber schwieriger, richtig zu kommen) und das Ergebnis mit 0.0 zu vergleichen. Es ist ein wenig faul, aber wahrscheinlich vernünftig anzunehmen, dass, wenn das Ergebnis Null ist, 'argv [2] 'keine Zahl enthält, also behandle es als einen Namen. (Ein gründlicherer Job würde 'strtod()' verwenden und prüfen, ob eine Zahl wie 0 gefunden wurde.) Vielleicht möchten Sie überlegen, was passiert, wenn dem Programm keine Befehlszeilenargumente übergeben werden oder wenn 20 davon übergeben werden. Solltest du nachsehen? –