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.


Log in to reply