vor allem ich bin neu in der Codierung in C.Wie liest man Eingabezeichenfolge bis eine Leerzeile in C?
Ich habe versucht, eine Zeichenfolge unbekannter Größe vom Benutzer zu lesen, bis eine leere Zeile angegeben ist, und speichern Sie es in eine Datei, und danach zu lesen Datei.
Ich habe es nur geschafft, bis eine neue Zeile angegeben ist und ich weiß nicht, wie ich nach einer Leerzeile suchen soll.
#include <stdio.h>
#include <stdlib.h>
char *input(FILE* fp, size_t size) {
char *str;
int ch;
size_t len = 0;
str = realloc(NULL, sizeof(char)*size);
if (!str)return str;
while (EOF != (ch = fgetc(fp)) && ch != '\n') {
str[len++] = ch;
if (len == size) {
str = realloc(str, sizeof(char)*(size += 16));
if (!str)return str;
}
}
str[len++] = '\0';
return realloc(str, sizeof(char)*len);
}
int main(int argc, const char * argv[]) {
char *istr;
printf("input string : ");
istr = input(stdin, 10);
//write to file
FILE *fp;
fp = fopen("1.txt", "w+");
fprintf(fp, istr);
fclose(fp);
//read file
char c;
fp = fopen("1.txt", "r");
while ((c = fgetc(fp)) != EOF) {
printf("%c", c);
}
printf("\n");
fclose(fp);
free(istr);
return 0;
}
Vielen Dank!
'EOF' kann nicht in' char' gespeichert werden, daher sollte der Typ von 'c' zum Speichern des von' fgetc() 'zurückgegebenen' 'int' sein. – MikeCAT
@MikeCAT Meinst du das ernst? ist auf den meisten Systemen nicht "EOF" (-1)? Ein vorzeichenbehaftetes Zeichen kann einen Wert zwischen -128 und 127 speichern –
@layzak Ja. Zeichen, die von 'fgetc()' zurückgegeben werden, sind ein Bereich von 'unsigned char'. Das Konvertieren von 'EOF' in" char "ist keine gute Idee, da es nicht möglich ist, eines von möglichem Zeichen und' EOF' zu unterscheiden. – MikeCAT