Search code examples
cstring-comparisonfile-writing

Cannot write in file using loop in C


I a trying to take file name as argument and write strings using loop until user enter "-1".

problem 1: writing is not happening in text file and always shows empty
problem 2: cannot compare input -1 and "-1" . Always runs the else statements.

Note: I also tried fputs but it did not work that time either.

FILE *fp = fopen(argv[1], "a");
//fseek(fp, 0, SEEK_END);
char str[100];

printf("enter string\n");

bool flag = true;
while (flag == true) {
    //printf("\nEnter data to append: ");
    fflush(stdin);
    fgets(str, 100, stdin);
    if (strcmp(str, "-1") == 0) {
        break;
    } else {
        fprintf(fp, "%s", str);
        printf("Text written in file: %s\n", str);
    }
}
fclose(fp);

Solution

  • Writing don't happen because of strcmp, I'm showing you my version of this with atoi.

    #include <stdio.h>
    #include <stdlib.h>
    
    #define buffer 128
    
    int main(int argc, char *argv[])
    {
        char str[buffer];
        int flag = 1;
    
        FILE *fp = fopen(argv[1], "w+");        //I prefer using write mode and not append
        if(fp==NULL)
        {
            printf("Error opening file.\n");    //here you control if the file is opening correctly
            exit(EXIT_FAILURE);
        }
    
        while(flag)                             //you don't need to write while(flag==true) (that's not wrong)
        {
            printf("Insert string: ");          
            scanf("%s", str);
    
            if(atoi(str)==1)                    //the function strcmp as you wrote it will break after the 
                break;                          //first cicle, use atoi, it returns 1 if the string is a number 
    
            fprintf(fp, "%s\n", str);           //the \n is to get the next string on the next row 
        }
    
        fclose(fp);
        return 0;
    }