char array problem
-
wort
undzeichnektte
haben keine Dimension. Wie soll der C Compiler deine Gedanken lesen?char befehl[100] = {"zeilenanzahl: %s \n", wort};
Das Format-Sring von printf/scanf ist keine Allgemeinregel in C, um strings zu bauen sondern printf/scanf spezifisch und nicht übertragbar, weil printf/scanf das Format parsen (als während der Laufzeit und nicht während der Compilezeit) und abhängig davon arbeiten.
char befehl[100]; sprintf(befehl, "zeilenanzahl: %s \n", wort);
-
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 argumentsLieben 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 verwirrendLG
-
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 4Habe 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 5sondern so:
Das Suchwort war test und die Zeile war 5Lieben 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);