PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : newline



cyber_gh0st
30.06.2009, 11:06
hi
ich habe ein Problem unzwar will ich mit folgendem Code eine Datei erstellen bezieungsweise weiterbeschreben was auch ganz gut klappt aber ich möchte das am ende der eingabe immer ein Newline ist aber ich weis nicht wie hier der Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
int c;
FILE *printdata;
if((printdata=fopen("usr.txt","a+"))==0) {
printf("Fehler beim öffnen der Datei!");
exit(EXIT_FAILURE);
}

else {
printf("bitte geben sie ihren Namen ein (beenden sie die Eingabe mit einer #):");
while ((c=getc(stdin))!=EOF) {
putc(c,printdata);
}
putc('\n',printdata); /iher soll ein Newlne Zeichen hin
printf("Datei wurde erfolgreich geschrieben");
}
return EXIT_SUCCESS;
}

mfg cyber_gh0st

Leange
30.06.2009, 11:53
Moin
Evt mit endl ?

putc(endl,printdata);

Edit: oh das gibts nich in C oder? -.- sry

wacked
30.06.2009, 12:14
"\r\n"?->bei win xp sp 3 klapptet
achso das mit dem # beendet die eingabe funktioniert unter win nich.
selftested

Ancient87
30.06.2009, 12:48
printf einfach ein \n \r oder schreib ein endl; auf den stream

std::cout << endl;

blackberry
30.06.2009, 12:56
@cyber_ghost

while ((c=getc(stdin))!=EOF) {
macht wenig Sinn, da stdin End-Of-File (EOF) nie erreichen wird (es sei denn du benutzt Pipes um einen Dateistream in stdin umzuleiten...)

Versuch' es mal mit:

while ((c=getc(stdin))!='\n') {


mfG. BlackBerry

Ancient87
30.06.2009, 13:03
Afaik ist in windows ^Z ein EOF also wenn du den sendest solltest der loop guard false sein ?

blackberry
30.06.2009, 13:30
Wer macht das schon?
cyber_ghost wollte sicher, dass der Benutzer seinen Namen eingibt und dann Enter drückt.

Außerdem fällt das mehr unter Pipes benutzen - also Eingabemanipulation.

cyber_gh0st
30.06.2009, 22:06
das mit endl klappt nicht gibts nur in C++ ich möchte aber reines C Programmieren (im Moment)

der Code sieht so aus:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
int c;
FILE *printdata;
if((printdata=fopen("usr.txt","a+"))==0) {
printf("Fehler beim öffnen der Datei!");
exit(EXIT_FAILURE);
}

else {
printf("bitte geben sie ihren Namen ein:");
while ((c=getc(stdin))!='\n') {
putc(c,printdata);
}
putc(endl,printdata);//<--- KLAPPT NICHT suche was anderes (reines C) :\
}
return EXIT_SUCCESS;
}

ich brauche etwas was ich für endl einsetzen kann damit in usr.txt nach der Eingabe eine neue Zeile angefangen wird...

mfg cyber_gh0st

blackberry
30.06.2009, 22:09
endl = \r\n

-->
puts("\r"); // puts fügt automatisch ein \n hinzu
printf("\r\n"); // selbsterklärend

putc('\r', stdout);
putc('\n', stdout); // einzeln

Ancient87
30.06.2009, 23:23
das machst ja in linux dauernd nur das es da halt ctrl+d ist

cyber_gh0st
03.07.2009, 08:57
habs jetzt so gamacht:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
int name[31];
FILE *printdata;
if((printdata=fopen("usr.txt","a+"))==0) {
printf("Fehler beim öffnen der Datei!");
exit(EXIT_FAILURE);
}

else {
printf("bitte geben sie ihren Namen ein:");
fscanf(stdin,"%29s",&name);//könnte man auch mit scanf machen ich weiß...
strcat(name,"\n");
fprintf(printdata,"%s",name);
}
return EXIT_SUCCESS;
}

klappt eigentlich ganz gut also alles was es tuhen soll
gibt bei mir aber trotzdem einen Fehler aus...(also ne Warnung)
und bei Space ist der String immer zu ende das heißt wenn ich:

USER PINGUIN
eingebe
steht in der Datei nur das hier:

USER
warum is das so bei fscanf scanf und co.
???

blackberry
03.07.2009, 13:03
Weil angenommen wird, dass der String keine Leerzeichen enthält.
fgets sollte helfen!

btw: seit wann speichert man Strings in Integer-Arrays...

btw2: bei fscanf benutzt man nicht &name, sondern nur name!

Ancient87
03.07.2009, 13:10
Weil scanf und co whitespaces herlichst egal sind aus der c++ reference:



Non-whitespace character, except percentage signs (%): Any character that is not either a whitespace character (blank, newline or tab) or part of a format specifier (which begin with a % character) causes the function to read the next character from the stream, compare it to this non-whitespace character and if it matches, it is discarded and the function continues with the next character of format. If the character does not match, the function fails, returning and leaving subsequent characters of the stream unread.
Wuerde sagen verwende fgets da gibt dir den gesamen string und du kannst den usen.

Edit: BB war mal wieder schneller.

MFG

cyber_gh0st
04.07.2009, 14:52
@BlackBerry: integer weil EOF auch dargestellt werden muss und in char nicht genug "Platz" ist. (oder habe ich da was falsch verstanden??? :( )


habs jetz aber geschafft vielen Dank für eure Hilfe:):):)