atrox
in fairy dust... I trust!
|
[CODE] <programmcode hier einfügen> [/CODE] noch ein tip: mit der edit-funktion den alten post herholen und die formatierung ändern. die spaces waren noch da. (siehe oben) zum code - ist leider nicht adhoc verständlich was du machst (also wann er welchen if-zweig nimmt), da fehlt der context (aber vielleicht willst du es kurz erklären). auch wäre hilfreich zu wissen, wo er was unerwünschest einfügt, und wann ein \n erwünscht ist. wenn du in die datei dinge schreibs die du nicht haben willst, gibts mehrere möglichkeiten: a) schreibtst du auch wirklich das was du willst in die datei? vielleicht ist das \n irgendwo in diesen strings enthaltn? evt musst du die strings die du schreibst noch bearbeiten b) bist du sicher, das in nameeing[] und betreff[] immer ein '_' vorkommt, bzw das beide immer genau 80 zeichen lang sind ? sollte da keine abbruchbedingung für ein \0 drin sein ? c) \b backspace hillft nur was auf terminals. d) über strchr(),strncpy(),fputc() und formatstrings unterhalten wir uns ein ander mal e) falls sich erst zu einem späteren zeitpunkt im programm herausstellt ob irgendwas wieder aus der datei entfernen musst oder nicht, kannst du entweder das schreiben so lange herauszögern bis du die entscheidung treffen kannst (dh ausgabe puffern), oder du verwendest fseek() zum herumspringen in der datei
Bearbeitet von atrox am 10.07.2003, 13:04
|
x3
† 18.03.2006
|
so hab jetzt dann selber eine lösung gefunden zwar nicht so schön aber sie funkt: #include <stdio.h>
#include <time.h>
#include<conio.h>
#include<stdlib.h>
#define FALSE 0
#define TRUE 1
main()
{
FILE* ziel, *ablage, *quelle;
char zeichen[300], betreff[80]="noch nicht vorhanden", nameeing[80]=" ", help[7]="itweb01", help1[3]="192";
int auswahl, i, zaehler;
int betref1, name;
auswahl=1;
betref1=FALSE;
name=FALSE;
while(auswahl!=0)
{
printf("1. Betreff aendern, ansonsten Default(kommt noch)\n");
printf("2. Ihr Name, ansonsten Default(name)\n");
printf("3. Nachrichten erstellen\n");
printf("0. Ende\n");
scanf("%i", &auswahl);
system("cls");
switch(auswahl)
{
case 1:
zaehler=0;
printf("Geben Sie Ihren gewaenschten Text ein(80 Zeichen max., oder _ als abbruchbedingung):\n");
printf("Bitte Zeit auch mit eingeben!!\n");
for(i=0;i<80;i++)
{
scanf("%c", &betreff[i]);
if(betreff[i]=='_')
{
break;
}
}
betref1=TRUE;
system("cls");
printf("Einstellungen erfolgreich uebernommen\n\n");
break;
case 2:
zaehler=0;
printf("Geben Sie Ihren Namen ein(80 Zeichen max., mit _ bestaetigen):\n");
for(i=0;i<80;i++)
{
scanf("%c", &nameeing[i]);
if(nameeing[i]=='_')
{
break;
}
}
name=TRUE;
system("cls");
printf("Einstellungen erfolgreich uebernommen\n\n");
break;
case 3:
quelle = fopen("quelle.txt", "r");
ablage = fopen("zwischen.txt", "w");
if(quelle==NULL)
{
printf("Quelledatei nicht gefunden oder nicht vorhanden\n");
system("pause");
}
else
{
while(!feof(quelle))
{
fscanf(quelle, "%[^.]%*[^\n]\n", &zeichen);
fprintf(ablage, "%s\n", zeichen);
}
fclose(quelle);
fclose(ablage);
ablage = fopen("zwischen.txt", "r");
ziel = fopen("HQDS_SEND_MESSAGE.cmd", "w");
if(ablage==NULL)
{
printf("Datei nicht gefunden oder nicht vorhanden\n");
system("pause");
}
else
{
do
{
fscanf(ablage, "%s\0", &zeichen);
if(strcmp(help, zeichen) == FALSE||strcmp(help1, zeichen) == FALSE){}
else
{
fprintf(ziel, "net send %s ", zeichen);
if(betref1==TRUE)
{
//fprintf(ziel, "\b");
for (i=0; i<80; i++)
{
if(betreff[i]=='_')
{
break;
}
if (betreff[i] != '\n')
{
fprintf(ziel, "%c", betreff[i]);
}
}
fprintf(ziel, " ");
}
if(name==TRUE)
{
for (i=0; i<80; i++)
{
if(nameeing[i]=='_')
{
break;
}
if (betreff[i] != '\n')
{
fprintf(ziel, "%c", nameeing[i]);
}
}
fprintf(ziel, "\n");
}
if(betref1==FALSE)
{
fprintf(ziel, "\"Aufgrund eines Server Neustarts
bitten wir Sie dringend Änderungen zu speichern und den SQM
zu beenden. SQM/QDMS ist zwischen time nicht verfügbar.
Wir bitten um Verständnis! mfg \0");
}
if(name==FALSE)
{
fprintf(ziel, "name\"\n\0");
}
}
}while(!feof(ablage));
}
}
system("cls");
printf("Nachricht wurde erstellt\n\n");
fclose(ziel);
break;
case 0:
printf("Auf Wiedersehen!\n");
system("pause");
system("cls");
default:
printf("Falsche Eingabe\n");
break;
}
}
}
so den teil mit dem enter problem hervogehoben: fprintf(ziel, "net send %s ", zeichen);
if(betref1==TRUE)
{
//fprintf(ziel, "\b");
for (i=0; i<80; i++)
{
if(betreff[i]=='_')
{
break;
}
if (betreff[i] != '\n')
{
fprintf(ziel, "%c", betreff[i]);
}
}
fprintf(ziel, " ");
}
if(name==TRUE)
{
for (i=0; i<80; i++)
{
if(nameeing[i]=='_')
{
break;
}
if (betreff[i] != '\n')
{
fprintf(ziel, "%c", nameeing[i]);
}
}
fprintf(ziel, "\n");
}
denn er hat sich bei der eingabe in enter gemekt und hat dies hinzugefügt
Bearbeitet von atrox am 10.07.2003, 21:30 (readability)
|
atrox
in fairy dust... I trust!
|
tip, schau dir in der hilfe die funktionen der strings.h an, ausserdem (f)putc,(f)getc,strncpy,etc dein programm ließe sich damit imho deutlich vereinfachen.
andere frage, warum verwendest du gerade '_' als abschluß?
|
x3
† 18.03.2006
|
mit is nichts anderes eingefahllen was nicht gebraucht werden könnte, nur das _ und so nahm ich dann auch dies
|
atrox
in fairy dust... I trust!
|
.. und was ist mit der <ENTER>-Taste ? wäre das nicht deutlich intuitiver?
|
x3
† 18.03.2006
|
wollte ich zunächst auch nehmen aber er nahm mir bei der oben if dann die abbruch bedingung '\n' also enter net, im war das sozusagen egal und lass ein bis ich 80 zeichen eingegeben habe, und das ist auch nicht perfekt!
|
atrox
in fairy dust... I trust!
|
\r ? ist auch egal... schau dir aber die sachen an, die ich dir vorher geschrieben habe, evt auch (f)gets , dann wirst automatisch die nachfolgenden programme klarer und sauberer programmieren. dann werden solche klimmzüge wie hier gar nicht notwendig.
|