Addieren in der Console ...



  • Hallo,
    ich hab mal wieder ein kleines Problem mit einem Programm. Aufgabenstellung ist die folgende:

    Program 11: Command Line Sum
    Write a C program that will sum up the integers on the command line. For example, suppose the program is launched with:

    % a.out 4 511 6 <ret>
    then your program should output the number 521. If the program is launched with

    %a.out 1 4 9 16 25 36 <ret>
    then your program should output the number 58.

    Meine Loesung ist diese hier, allerdings weiss ich nicht warum bei sum immer wieder NULL rauskommt 😕

    /***************************************************************/
    /* Programmer: Micha Hobert                                    */
    /*                                                             */
    /* Program 4:  Command Line Sum                                */
    /*                                                             */
    /* Approximate completion time:   45 minutes                   */
    /***************************************************************/
    
    #include <stdlib.h>
    
    int main( int argc, char *argv[] ) {
    
    	int sum=0;
    	int i;
    
    	printf(" Please type in the numbers you want to sum:" );
    	scanf("%s", &argv);
    
    		for ( i=1; i<argc; i++){
    			sum = sum + atoi( argv[i]);
    
    			}
    
    	printf("The sum of your numbers is: %d\n", sum);
    
    		}
    


  • printf(" Please type in the numbers you want to sum:" );
    	scanf("%s", &argv);
    

    Die beiden Zeilen bringen irgendwie nix.
    Der Rest sieht für mich gerade ok aus.



  • Die Zeilen habe ich auch nur dazugefuegt weil ich zur Zeit nicht auf den Server zugreifen kann und nicht in der cmd leiste arbeiten kann, sondern nur ein Programm habe mit dem ich sehe ob der Code soweit stimmt und ich kompilieren kann.

    Also duerfte das programm mit ./a.out 4 5 6 mir das Ergebniss 15 geben ?



  • huhu,
    du sollst die werte quasi von außen über die konsole ans programm übergeben und nicht vom programm einlesen lassen.
    mit der zeile

    scanf("%s", &argv);
    

    zerschießt du dir im günstigsten fall einen oder mehrere eingetippten werte.



  • Isengo schrieb:

    Die Zeilen habe ich auch nur dazugefuegt weil ich zur Zeit nicht auf den Server zugreifen kann und nicht in der cmd leiste arbeiten kann, sondern nur ein Programm habe mit dem ich sehe ob der Code soweit stimmt und ich kompilieren kann.

    Der Speicher gehört aber nicht Dir. Der könnte schreibgeschützt sein oder zu kurz oder nasaldämonisch. Da darfst Du nicht mit scanf was reinschreiben. Eigentlich nicht. Klappt wohl bei Dir trotzdem. Puh, Grlück gehabt. Aber argc haste damit noch nicht angepaßr. Das ist ja doch noch 0. Also kommt als Summe 0 raus, weil die Schleife gar nicht läuft wenn argc==0.

    Ich würde so faken:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int argc=3;
        char* argv[]={"4","511","6"};
    
    	int sum=0;
    	int i;
    
    	for ( i=1; i<argc; i++) {
    		sum = sum + atoi( argv[i]);
    	}
    
    	printf("The sum of your numbers is: %d\n", sum);
    	return sum;
    }
    


  • Okay, so hat's jetzt local bei mir geklappt. Besten Dank !

    Werde das nachher nochmal im UNI Netz ausprobieren, wenn ich Zugriff auf den Mercury habe...



  • Typischer Fall von "Alles richtig programmiert, aber falsch getestet." 🙂
    An so Dingern hänge ich auch manchmal tagelang. Da kann man im Code Fehler suchen, bis man verrückt wird. Man kann keinen Fehler finden, weil nämlich gar keiner da ist. Mein Lieblingsfehler ist, wenn ich einen Funktionsaufruf auskommentiert habe, nicht mehr dran denke, und tausend Änderungen an der Funktion mache, in der Hoffnung, sie zum Funktionieren zu kriegen.



  • Haha, zum Glueck ist mir das mit dem auskommentieren noch nicht passiert, schreibe kaum Kommentare, aber daran werde ich jetzt denken 😃

    Also das kleine Programm hab ich eben ausprobiert, und es funktioniert, wenn ich also ./a.out 5 7 34 eingeben, bekomme ich als Ergebniss 46 🙂

    Jetzt versuche ich mich gerade an dem Problem Nummer 2, habe jetzt gerade einen anderen Weg gefunden den ich nur noch ausarbeiten muss, mit strlen und dann mit einer for und while schleife 🙂

    Besten Dank nochmal.


Anmelden zum Antworten