无法使用 C 中的循环写入文件

Cannot write in file using loop in C

我尝试将文件名作为参数并使用循环写入字符串,直到用户输入“-1”。

问题 1:文本文件中没有写入,总是显示为空
问题 2:无法比较输入 -1 和 "-1"。始终运行 else 语句。

注意:我也试过fputs,但那次也没用。

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);

因为 strcmp 没有写,我用 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;
}

因为 fget() 读取换行符。

所以一旦你做了比较,它看起来像:

strcmp("-1\n", "-1");

strcmp("-1\n\r", "-1");

你永远不会打破循环。 要删除换行符,请尝试:

strtok(str, "\n");

strtok(str, "\r\n");

如果你想让它与 strcmp 一起工作,你的 if 语句应该是 if(strcmp(str, "-1\n")) 因为 fgets 也读取 \n 字符。