我正在尝试编写一个加密输入文件的程序,并在加密后创建输出文件。
如果我写fprintf
stdout
工作正常,但是当我将输出发送到文件时,只有最后fprintf
输出被写入文件,即输入文件包含2行,输出文件仅包含加密的最后一行。
来源:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define Max 1024
int menu()
{
printf("To encrypt, input e or E\n");
printf("To decrypt, input d or D\n");
printf("To exit, input any other letter\n");
printf("Please enter your choice and hit return:\n");
return 0;
}
void encrypto(char*str)
{
FILE *ausgabeverschl;
ausgabeverschl=fopen("encrypted.txt","w");
int n=0;
char *p=str ,q[Max];
while(*p)
{
if(islower(*p))
{
if((*p>='a')&&(*p<'x'))
q[n]=toupper(*p + (char)3);
}
else
{
q[n]=*p+(char)3;
}
n++; p++;
}
q[n++]='\0';
fprintf(ausgabeverschl, "%s\n", q); // problem occurs here
fclose(ausgabeverschl);
}
void decrypto(char*str)
{
FILE *ausgabeunverschl;
ausgabeunverschl=fopen("decrypted.txt","w");
int n=0;
char *p=str, q[Max];
while(*p)
{
if(isupper(*p))
{
if((*p>='D')&&(*p<='Z'))
q[n]=tolower(*p - (char)3);
}
else
{
q[n]=*p-(char)3;
}
n++; p++;
}
q[n++]='\0';
fprintf(ausgabeunverschl,"%s\n",q);
fclose(ausgabeunverschl);
}
int main()
{
char einlesestring[Max];
char choice[2];
FILE *ein;
ein=fopen("text.txt","r");
if(ein!=NULL)
{
printf("\nFile found.\n\n");
}
if(ein==NULL)
{
printf("No file found.\n");
return 1;
}
int counter=0;
char stringlaenge[Max];
while (fgets(stringlaenge, Max, ein) != NULL)
{
counter++;
}
printf(„Counted lines: %d\n", counter);
rewind(ein);
menu();
gets(choice);
if((choice[0]=='e')||(choice[0]=='E'))
{
while(fgets(einlesestring, Max, ein)!= NULL)
{
encrypto(einlesestring);
}
}
else if((choice[0]=='d')||(choice[0]=='D'))
{
while(fgets(einlesestring,Max, ein)!=NULL)
{
decrypto(einlesestring);
}
}
fclose(ein);
return 0;}
感谢您的帮助!