为什么fputs()只在文件中添加一个单词?

时间:2017-04-30 16:37:42

标签: c file-handling

在这个程序中我的edit()函数不能正常工作。当我尝试写东西时它只是擦除整个内容而在appendText()中只有一个单词被追加?是否有任何方法可以将整个字符串写入文件?

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



main(void){

    char fName[100];

    printf("Enter file name :\n");
    scanf("%s",&fName); //File Name

    int choice;
    printf("Enter your choice : \n1.Edit text\n2.Read the contents of the file\n3.Append text\n4.Exit\n");  //Enter choice
    scanf("%d",&choice);

    switch(choice){

        case 1 :
            edit(fName);        //Edit text
            break;
        case 2 :
            readContents(fName); //Read file    
            break;
        case 3 :
            appendText(fName);      //Append 
            break;  
        case 4 :
            exit(0);            //Exit
            break;
        default :
            printf("Invalide Option!\n"); 
            break;      
    }//End switch

}//End main

//Function to edit contents of the file
void edit(char file[100] ){

    int line,temp = 0;
    printf("Enter the line no. to be edited : \n");
    scanf("%d",&line);  //Line no

    char sentence[100];
    printf("Enter the content : \n"); 
    scanf("%s",sentence);

    char str[100];
    FILE *fName = fopen(file,"w");

    while(!feof(fName)){

        temp++;
        fgets(str,99,fName);

        if(line == temp)
            fputs(sentence,fName); break;

    } 

    printf("\nContents of the file has been updated!\n");

    fclose(fName);


}//End edit()

//Function to read the contents of the file

void readContents(char file[100]){

    char str[100];
    FILE *fName = fopen(file,"r");
    while(!feof(fName)){
        puts(fgets(str,99,fName));
    } 

    fclose(fName);
    printf("\n");
} //End readContents()


//Funtion to append string to an existing file

void appendText(char file[100]){

    char str[100];
    FILE *fName = fopen(file,"a");

    printf("Enter your string :\n");
    scanf("%s",&str);

    fputs(str,fName);   

    fclose(fName);
    printf("\nText added to the file\n");


}//End of append()

2 个答案:

答案 0 :(得分:2)

您实际上只是更改(文本)文件的内容以按照您正在进行的方式更改一行。当您编写新字符串时,您将覆盖文件的其余部分。您需要将整个文件读入内存,更改所需的行,然后将整个文件写入文件。或者,从文件中读取,将每一行写入第二个文件(在找到时替换文本),然后删除/重命名文件。

对于appendText,来自%{s(强调我的)的http://www.cplusplus.com/reference/cstdio/scanf/

  

任意数量的非空白字符,停在找到的第一个空白字符处。在存储序列的末尾会自动添加一个终止空字符。

即,你追加的scanf只读取第一个单词,这就是为什么只附加第一个单词。

答案 1 :(得分:1)

此代码的许多问题之一是,当您使用模式"w"打开文件时,将删除其所有现有内容。如果您不想这样做,请改用模式"r+"