Wie liest man einen string aus der Benutzer-Eingabe in C, in array und drucken
Ich bin ziemlich neu in C und ich habe gelesen, ein paar Kapitel von einem C-Buch habe ich und jetzt habe ich eine Zuweisung, aber ich bin verwirrt hoffe jemand kann mir helfen.
Muss ich Lesen, 2 strings vom Benutzer (char-arrays) Eingang mit einer maximalen Länge von 100 Zeichen, und konvertieren Sie Sie in Großbuchstaben ausdrucken und mit einem Zeilenumbruch \n nach jedem Wort.
Bis jetzt habe ich dieses:
int main() {
char chars[100];
int i = 0;
char str1;
char str2;
int j = 0;
scanf("\n %c", str1);
scanf("\n %c", str2);
while (str1[i] != '\0') {
chars[i] = str1[i];
toupper(chars[i]);
printf(chars[i]);
i++;
}
while (str2[j] != '\0') {
chars[j] = str2[j];
toupper(chars[j]);
printf(chars[j]);
j++;
}
return 0;
}
nachdem er die 2 Eingänge vom Benutzer, es sagt nicht mehr läuft und sagt Fehler beim ausführen.
str1
undstr2
sollten array- krank versuchen, das... machte keinen Unterschied, wie es noch hält, nachdem die Eingabe
- Ihr compiler nicht geben, keine Warnungen, richtig? Oh warte noez...
- Hinweis: Sie verwenden möchten
fgets()
. Google-Dokumentation. Bleiben Sie weit Weg vonscanf()
. - Ist es nicht möglich, ohne fgets() ? Nicht sicher, ob ich soll, es zu benutzen.
char chars[100]
ist groß genug für eine maximale Eingangsspannung von 99 Zeichen und dann ein abschließendes\0
. Sie vielleicht möchten zur Steigerung Ihrer Puffer-Größe von 1.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist Ihre unmittelbare problem:
Dieser format-string erzählt
scanf
zu Lesen, die Menge von whitespace-Zeichen, gefolgt von einem einzigen Zeichen, die gespeichert werden instr1
.@H2CO3 richtig ist:
scanf
ist fast nie die richtige Antwort für das Lesen von Eingaben vom Benutzer. Es führt kein bounds checking und ist zu pingelig über das format der Benutzereingabe; ein unerwarteter Charakter völlig verwirren. Sie sind sehr stark ermutigt,fgets
statt, wenn überhaupt möglich:Wenn Sie sind nicht erlaubt, dies zu tun ist, Fragen Sie Ihren professor, warum nicht. Ernst.
Wenn du unbedingt nutzen
scanf
zu Lesen hier eingeben, können Sie tun es so, wie @user2479209 beschrieben in Ihrer Antwort.Gibt es ein anderes problem mit Ihrem Programm, das ist, dass
toupper(chars[i])
wird sich nicht ändern, der Wert gespeichert, inchars[i]
. Ordnen Sie das Ergebnis dertoupper
zurück auf das array explizit, z.B.:ändern str1 und str2 zu array. verwenden eine 100% [^\n] in den zwei ersten scanf ist.Es ist ein regulärer Ausdruck trick zu Lesen, strings mit Leerzeichen.Lesen Sie über es.
Diese wird in zwei strings.drücken Sie die EINGABETASTE nach der Eingabe des ersten string eingeben, der zweite.
Ich denke, dass können Sie auch
scanf_s
(securescanf
) und sammeln beide strings Eingabe durch den Benutzer in einem Schuss. Sie können auch definieren Sie die array-Größe als symbolische Konstante für Flexibilität, auf der Spitze des Programms, außerhalb desmain
- und unterhalb der#include
preprocesor Richtlinien.Alternativ:
Ich denke, dass, wenn Sie nicht wollen, zu tun
#define SIZE 101
können Sie auch tun:Ich bin neu in C also fühlen Sie sich frei, um diese zu verbessern, zu beantworten.