无法使用 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 字符。
我尝试将文件名作为参数并使用循环写入字符串,直到用户输入“-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 字符。