char array problem



  • Ob wort nun eine Zahl (z.B. int) oder ein String (char[]) sein soll, da solltest du dich schon entscheiden. C ist eine typisierte Sprache. Bei Arraydefinitionen muss immer die Größe mitdefiniert werden oder ein Initialisierung angegeben werden, anhand der der Compiler die Größe bestimmen kann, also z.B.

    char str[]="12345";
    char str[6];
    

    legen für beide die Größe auf 6 Zeichen fest.

    #include <stdio.h>
    #include <stdlib.h>
    #define SLEN 100
    
    int main(void)
    {
    char wort[SLEN],zeichenkette[SLEN],befehl[SLEN];
    int wortalszahl;
    
    printf("Bitte geben Sie das Suchwort ein \n");
        fgets(wort, SLEN, stdin);
    
    printf("%s \n",wort);
    
    strcpy(befehl, "zeilenanzahl: %d \n");
    wortalszahl=atoi(wort);
    sprintf(zeichenkette,befehl,wortalszahl);
    puts(zeichenkette);
    return 0;
    }
    


  • Ja das funktioniert, aber habe trotzdem noch ein kleines Problem:

    Mein Code sieht jetzt mal so aus:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    
    {
    	int zeile;
    	char string[100];
    	char befehl[100];
    
    	printf("Bitte geben sie das Suchwort ein : \n");
    	fgets(string, 100, stdin);
    
    	printf("Geben sie bitte nun die Zeilen der Ausgabe an : \n");
    	scanf("%d",&zeile);
    
    	sprintf(befehl, "Das Suchwort war %s und die Zeile war %d \n", string , zeile);
    
    	printf(befehl);
    
    	return 0;
    
    	}
    

    Wieso wird in der Ausgabe printf(befehl) denn nach %s ein \n gemacht ?
    Des weiteren bekomme ich noch eine Fehlermeldung:
    unbenannt.c:25: warning: format not a string literal and no format arguments

    Lieben Gruß



  • Das Problem lag hier :

    printf("%s",befehl);

    Vielen dank für die Hilfe, übrigens sehr nettes Forum.
    Komme von vb.net, da ist schon manches in C sehr verwirrend 🙂

    LG



  • ein '\n' wird gemacht, weil du das zuvor angegeben hast!
    printf steht für print formatted, d.h. normalerweise wird dies nur mit Parametern verwendet, die an den Platzhaltern ("%...") im Formatstring eingefügt werden. Zur Ausgabe von reinen Strings ohne Format gibt es andere Funktionen wie "puts()".



  • Aber auch wenn ich

    puts(befehl);
    

    verwende, ist die ausgabe auf 2 zeilen:

    Das Suchwort war msn
    und die Zeile war 4

    Habe dort doch kein \n drin ?!

    LG



  • puts() hängt immer automatisch ein "\n" an, das steht so im Standard.



  • #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    
    {
    	int zeile;
    	char string[100];
    	char befehl[100];
    
    	printf("Bitte geben sie das Suchwort ein : \n");
    	fgets(string, 100, stdin);
    
    	printf("Geben sie bitte nun die Zeilen der Ausgabe an : \n");
    	scanf("%d",&zeile);
    
    	sprintf(befehl, "Das Suchwort war %s und die Zeile war %d \n", string , zeile);
    
    	puts(befehl);
    
    	return 0;
    
    	}
    

    wie kann ich denn meinen Code verändern, dass ich die Ausgabe von

    sprintf(befehl, "Das Suchwort war %s und die Zeile war %d \n", string , zeile);
    

    in einer Zeile ausgegeben bekomme und nicht so :
    Das Suchwort war test
    und die Zeile war 5

    sondern so:
    Das Suchwort war test und die Zeile war 5

    Lieben Dank für die Mühe ..



  • Wenn ich z.b den string als letztes dranhänge...

    sprintf(befehl, "Das Suchwort war %d und die Zeile war %s \n", zeile , string);
    

    Dann wird es in einer Zeile ausgegeben...doch wenn ich %d zuerst setzte, nicht.

    LG



  • Wird hier :

    fgets(string, 100, stdin);
    

    vielleicht das "Enter drücken" mit in die Variable geschrieben ?

    LG



  • Richtig erkannt. Du bist schon bei den Feinheiten angekommen.
    Wie printf zur formatierten Ausgabe gibt es auch scanf zur formatierten Eingabe; für Stringeingabe wird das '\n' auch nicht übernommen;

    scanf("%99s",string);
    

Anmelden zum Antworten