我正在尝试打开然后写入.dat文件。该文件只是一个简单的数字系列,但我想添加它。现在fputs不适合我。
我想知道我是否正在使用正确的功能来完成这项工作。现在它说我不能在函数 fputs 中使用整数 enter_this ,因为它不是一个常量字符。
我想要求用户在文件中添加一个整数。我理解了这一点之后的下一步是添加字符串,浮点数,字符等等。但只是得到一些有用的东西是好的。
#define _CRT_SECURE_NO_WARNINGS #包括 #包括 #包括 #包括 #包括 #包括 #包括 #include
//functions called
//why is it void?
int main(void)
{
FILE *pFile;
int choice = 0;
char buf[40];
int i = 0;
int num[40];
int enter_this;
printf("WELCOME. \n\n");
pFile = fopen("test.dat", "r");
if (pFile != NULL)
for (i = 0; i < 8; i++)
{
//get num
fgets(buf, sizeof(buf), pFile);
num[i] = atoi(buf);
printf("#%i = %i\n", i, num[i]);
}
printf("Enter number to be added: ");
gets_s(buf);
enter_this = atoi(buf);
fputs(enter_this, pFile);
fclose(pFile);
system("pause");
}//end main
答案 0 :(得分:1)
int main(void)
&#39; void&#39;在这种情况下暗示功能&#39; main&#39;不接受任何参数。如果你只是在C中留下空的parens,这意味着函数接受可变数量的参数,而不是你想象的那样。
如果您想在文件的末尾添加一个数字,则必须在&#34;追加模式&#34;中打开它:
FILE *pFile = fopen("test.dat", "a");
第二个论点&#34; a&#34;是一个模式字符串。它告诉fopen打开文件进行追加,即数据将写在文件的末尾。如果该文件不存在,则创建该文件。您当前正在打开文件&#34;只读&#34;模式&amp;根本无法写信给它。阅读fopen采用here的不同模式字符串。
检查文件指针是否为NULL也是多余的。你已经没有通过&#39;如果&#39;在指针不为NULL时运行。它应该是这样的:
if (!pFile) {
puts("Something went wrong");
exit(1);
}
最后,fputs采用STRING值,即字符常量。它将拒绝使用enter_this,因为它是一个整数。将整数写入文件的一种方法是使用fprintf。例如:
/* Write the integer enter_this & a newline to pFile */
fprintf(pFile, "%d\n", enter_this);