Anwendung per Parameterübergabe



  • Hallo, ich hatte eine Aufgabe, dabei sollen 4 Parameter an eine Funktion übergeben werden.

    1. Parameter: Abspeichern der Zahlen (z.B.: C:\root.txt)
    2. Parameter: Anzahl der Zufallszahlen
    3. Parameter: Modus: r=Zufallswerte, a=absteigende Zahlen, d=aufsteigende Zahlen, ar=absteigende Zahlen mit Zufallswert, dr=aufsteigende Zahlen mit Zufallswert.
    4. Parameter: Wird noch ergänzt.

    Bekomme nun aber als Fehler:[Warning] multi-character character constant in der Zeile 55 und 66. In der Aufgabe heißt es aber, dass ich ar und dr verwenden soll. Hat jemand eine Lösung, ohne die Parameternamen auswechseln zu müssen?

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    
    int main(int argc, char *argv[])
    {
      FILE *f1;
    
      int p1= (argv[1]);
      int p2=atoi (argv[2]);
      int p3= (argv[3]);
      //int p4=(argv[4]);
    
      int x,y; 
      int num[p2];
    
      printf("Dateiname:     %s\n",p1);
      printf("Zufallszahlen: %d\n",p2);
      printf("Modus:         %s\n",p3);
    
      f1=fopen((char*)p1,"w");
      for (x=1;x<=p2;x++)
         num[x] = (int)(p2 * rand()/(RAND_MAX+1.0));
    
      if (p3=='r')
         {
            printf("\nZufaellige Anordnung\n\n");    
            for (x=1;x<=p2;x++)
            {
               printf("\n%d", num[x]);
               fprintf(f1, "%d\n",num[x]);
            }
         }
    
      if (p3=='a')
         { 
            printf("\nAufsteigende Anordnung");    
            for (x=1;x<=p2;x++)
            {
               printf("\n%d",x);
               fprintf(f1, "%d\n",num[x]);
            }
         }     
    
      if (p3=='d')
         {
            printf("\nAbsteigende Anordnung");     
            for (x=p2;x>0;x--)
            {
               printf("\n%d",x);
               fprintf(f1, "%d\n",num[x]);
            }
         }
    
      if (p3=='ar')
         {
            printf("\nAbsteigende Anordnung mit Zufallssummand");   
            for (x=1;x<=p2;x++)
            {
               y=num[x]+x;
               printf("\n%d",y);
               fprintf(f1, "%d\n",y);
            }   
         }
    
      if (p3=='dr')
         {
            printf("\nAufsteigende Anordnung mit Zufallssummand");
            for (x=p2;x>0;x--)
            {
               y=num[x]+x;
               printf("\n%d",y);
               fprintf(f1, "%d\n",y);
            }
         }
      else printf("\nKein oder falscher Parameter bei Modus");
    
      fclose(f1);
      getch();
    }
    


  • Die einzelnen Elemente von argv sind keine Einzelzeichen, sondern Strings - also brauchst du "" (und mußt sie per strcmp() vergleichen).



  • OK, danke. Habe das strcmp noch nie benutzt und musste erstmal bisschen rumwursteln, bis ich hier drauf gekommen bin: if (strcmp(p3,"r")==0)



  • Hallo, ich habe nun mein Programm etwas erweitert und muss dort das Array mit diversen Sirtieralgorithem durchlaufen lassen. Allerdings habe ich da ein Problem den 5. Parameter, der den Sortieralgorithmus beschreibt, an eine Funktion sort zu übergeben die dann entscheidet welcher Sortieralgorithmus loslaufen soll.
    [Warning] passing arg 1 of strcmp' makes pointer from integer without a cast [Warning] passing arg 1 ofbubble' makes pointer from integer without a cast

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void bubble(int *ptr, int N)
    {
       int temp,i,j;
       for (i=0; i<N-1; i++)
       {
          for (j=0; j < N-1-i; j++)
          {
              if ( *(ptr+j) > *(ptr+j+1) )
             {
                 temp = *(ptr+j);
                 *(ptr+j) = *(ptr+j+1);
                 *(ptr+j+1) = temp;
             }
          }
       }
    }
    
    void sort(char p5, int num, char p2)
    {
       if (strcmp(p5,"b")==0)             //Hier der 1. Fehler
       {
          bubble(num,p2);                 //Hier der 2. Fehler
       }
    }
    
    int main(int argc, char *argv[])
    {
       FILE *f1;
    
       char *p1= (argv[1]);               //Speicherort
       int p2=atoi (argv[2]);             //Anzahl der Zufallszahlen
       char *p3= (argv[3]);               //Sortierreihenfolge
       int p4=atoi (argv[4]);             //Überlagerung
       char *p5= (argv[5]);               //Sortieralgorithmus
    
       int start, finish;                 //Start und Ende der Zeitmessung
       double zeit;
       int sort;                          //Legt den Sortieralgorithmus fest
       int x,y; 
       int num[p2],ueb[p4],ar[p4],dr[p4]; //Array mit Zufallszahlen
    
       if (argc<5)                        //Abfangen zu wenig Parameter
       { printf("FEHLER, zu wenige Argumente!");
       getch();
       return 0;
       }
       else{
       printf("Dateiname:          %s\n",p1);
       printf("Zufallszahlen:      %d\n",p2);
       printf("Modus:              %s\n",p3);
       printf("Ueberlagerung:      %d\n",p4);
       printf("Sortieralgorithmus: %s\n",p5);
    
       f1=fopen((char*)p1,"w");            //Öffnet Datei
    
       for (x=1;x<=p4;x++)
       {
          ueb[x] = (int)(p4 * rand()/(RAND_MAX+1.0));
          ar[x] = ueb[x]+x;
          dr[x] = ueb[x]+10-x;
       }
    
       for (x=1;x<=p2;x++)
          num[x] = (int)(p2 * rand()/(RAND_MAX+1.0));
    
       if (strcmp(p3,"r")==0)
          {
             printf("\n\nHaben Sie etwas Geduld. Das Array wird sortiert...\n");
             printf("\nZufaellige Anordnung\n\n");
             start=clock();
             sort(p5,num,p2);
             finish=clock();
             zeit=(double)(finish-start);    
             printf("Gebrauchte Zeit: %.2fms",zeit);
          }
    
       if (strcmp(p3,"a")==0)
          { 
             printf("\n\nHaben Sie etwas Geduld. Das Array wird sortiert...\n");
             printf("\nAufsteigende Anordnung\n\n");    
             start=clock();
             sort(*p5,num,*p2);
             finish=clock();
             zeit=(double)(finish-start);
    
             printf("Gebrauchte Zeit: %.2fms",zeit); 
          }   
    
       if (strcmp(p3,"d")==0)
          {
             printf("\n\nHaben Sie etwas Geduld. Das Array wird sortiert...\n");
             printf("\nAbsteigende Anordnung\n\n");     
             start=clock();
             bubble(num,p2);
             finish=clock();
             zeit=(double)(finish-start);
    
             printf("Gebrauchte Zeit: %.2fms",zeit);
          }
    
       if (strcmp(p3,"ar")==0)
          {
             printf("\n\nHaben Sie etwas Geduld. Das Array wird sortiert...\n");
             printf("\nAbsteigende Anordnung mit Zufallssummand\n\n");   
             start=clock();
             bubble(ar,p2);
             finish=clock();
             zeit=(double)(finish-start);
    
             printf("Gebrauchte Zeit: %.2fms",zeit);
          }
    
       if (strcmp(p3,"dr")==0)
          {
             printf("\n\nHaben Sie etwas Geduld. Das Array wird sortiert...\n");
             printf("\nAufsteigende Anordnung mit Zufallssummand\n\n");
             start=clock();
             bubble(dr,p2);
             finish=clock();
             zeit=(double)(finish-start);
    
             printf("Gebrauchte Zeit: %.2fms",zeit);
          }
       fclose(f1);
       getch();
    }
    }
    


  • du hast eine funktion sort und eine variable sort. das verwirrt den compiler.

    // denke p5 sollte hier ein char* sein
    void sort(char p5, int num, char p2)
    {
       if (strcmp(p5,"b")==0)             //Hier der 1. Fehler
       {
          // da stimmt die Reihenfolge der parameter nicht
          bubble(num,p2);                 //Hier der 2. Fehler
       }
    }
    

    Kurt



  • Tut mir leid, aber das hilft mir überhaupt nicht weiter.

    Das mit dem char Pointer habe ich auch schon versucht und die Reihenfolge ist bereits richtig. Denn zuerst übergibt er das Array und anschließend die Anzahl.


Anmelden zum Antworten