只有最后一个fprintf()输出被写入该文件

时间:2015-03-07 19:56:19

标签: c append file-writing

我正在尝试编写一个加密输入文件的程序,并在加密后创建输出文件。

如果我写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;}

感谢您的帮助!

0 个答案:

没有答案