如何在C中使用for循环将数字列表写入文件?

如何在C中使用for循环将数字列表写入文件?,c,file-io,C,File Io,所以我想使用for循环将10个不同的数字读入一个文本文件。我的程序的问题是在输入第四个数字时崩溃了。我该如何解决这个问题?这是我的密码: #include <stdio.h> #include <stdlib.h> /* For exit() function */ int main() { int x[20], i; FILE *fptr; fptr=fopen("line.txt","w"); printf("Enter numbers\n

所以我想使用for循环将10个不同的数字读入一个文本文件。我的程序的问题是在输入第四个数字时崩溃了。我该如何解决这个问题?这是我的密码:

#include <stdio.h>
#include <stdlib.h>  /* For exit() function */
int main()
{
   int x[20], i;
   FILE *fptr;
   fptr=fopen("line.txt","w");

   printf("Enter numbers\n");
   for (i=0; i<10; i++){
        gets(x[i]);
   }
   fprintf(fptr,"%d", x);
   fclose(fptr);
   return 0;
}
#包括
#include/*For exit()函数*/
int main()
{
int x[20],i;
文件*fptr;
fptr=fopen(“line.txt”,“w”);
printf(“输入数字”);

对于(i=0;i您需要使用
scanf
,不要使用
gets
gets
以这种方式使用是不安全的,它读取的是字符串,而不是数字。无论如何,我都不会使用
gets
。看看这个关于如何读取整数的答案


您需要使用
scanf
,不要使用
gets
gets
以这种方式使用是不安全的,它读取的是字符串,而不是数字。无论如何,我都会避免
gets
。看看这个关于如何读取整数的答案

您应该使用scanf

scanf("%d", x[i])
获取一个字符串,而不是整数。

您应该使用scanf

scanf("%d", x[i])

获取一个字符串,而不是整数。

这是一个问题,但在使用scanf编辑后,请注意
fprintf(fptr,“%d”,x);
将无法按预期工作,x不是整数,它是整数数组,因此需要将每个数组写入文件中,您可以使用循环执行此操作:

for (i=0; i<10; i++) {
    fprintf(fptr,"%d", x[i]);
}
fclose(fptr);

for(i=0;i这是一个问题,但在使用scanf编辑后,请注意
fprintf(fptr,“%d”,x);
将无法按预期工作,x不是整数,它是整数数组,因此需要将每个数组写入文件,您可以使用循环执行此操作:

for (i=0; i<10; i++) {
    fprintf(fptr,"%d", x[i]);
}
fclose(fptr);
(i=0;i
  • 在这种情况下,您使用
    for
    循环将值一个接一个地输入到数组中,但您能观察到如何将数组打印到文件中吗
  • 您还需要
    for
    循环打印文件中的所有10个值
intmain()
{
int x[20],i;
文件*fptr;
fptr=fopen(“line.txt”,“w”);
printf(“输入数字”);
对于(i=0;i<10;i++)
{
得到(x[i]);
}
对于(i=0;i<10;i++)
{
fprintf(fptr,“%d”,x[i]);
}
fclose(fptr);
返回0;
}
  • 您也可以这样做:
intmain()
{
int x[20],i;
文件*fptr;
fptr=fopen(“line.txt”,“w”);
printf(“输入数字”);
对于(i=0;i<10;i++)
{
得到(x[i]);
fprintf(fptr,“%d”,x[i]);
}
fclose(fptr);
返回0;
}
  • 在这种情况下,您使用
    for
    循环将值一个接一个地输入到数组中,但您能观察到如何将数组打印到文件中吗
  • 您还需要
    for
    循环打印文件中的所有10个值
intmain()
{
int x[20],i;
文件*fptr;
fptr=fopen(“line.txt”,“w”);
printf(“输入数字”);
对于(i=0;i<10;i++)
{
得到(x[i]);
}
对于(i=0;i<10;i++)
{
fprintf(fptr,“%d”,x[i]);
}
fclose(fptr);
返回0;
}
  • 您也可以这样做:
intmain()
{
int x[20],i;
文件*fptr;
fptr=fopen(“line.txt”,“w”);
printf(“输入数字”);
对于(i=0;i<10;i++)
{
得到(x[i]);
fprintf(fptr,“%d”,x[i]);
}
fclose(fptr);
返回0;
}

不要使用
gets()
曾经。但是,在
int
数组上使用它是不合适的。您是否阅读了以了解它的功能及其参数的类型?您是否注意到编译器发出的警告?更改gets to scanf后它是否仍然崩溃?我看到的最大问题是尝试使用fprintf x(一个int数组)添加到文件中,就好像它只是一个int一样。您可能想要的是再次循环x的所有10个元素,并分别对每个元素进行fprintf。您将
stdlib.h
'包含在
exit()
'中,但我看不到您在任何地方使用
exit()
。如果您最终没有使用它,您可以删除该
“包含
指令并使程序更小。在
main()
中,可以使用
return
获得与
exit()
相同的结果。从
main()
调用
return 1;
将获得与调用
exit(1)相同的结果。”:
。退出函数中的程序很有用。但是,请不要编辑问题,以使答案不相关/不正确。如果要在代码中添加某些内容,请附加新版本或询问其他问题。不要使用
get()
曾经。但是,在
int
数组上使用它是不合适的。您是否阅读了以了解它的功能及其参数的类型?您是否注意到编译器发出的警告?更改gets to scanf后它是否仍然崩溃?我看到的最大问题是尝试使用fprintf x(一个int数组)添加到文件中,就好像它只是一个int一样。您可能想要的是再次循环x的所有10个元素,并分别对每个元素进行fprintf。您将
stdlib.h
'包含在
exit()
'中,但我看不到您在任何地方使用
exit()
。如果您最终没有使用它,您可以删除该
“包含
指令并使程序更小。在
main()
中,可以使用
return
获得与
exit()
相同的结果。从
main()
调用
return 1;
将获得与调用
exit(1)相同的结果。”:
。但是,退出函数中的程序很有用。请不要编辑问题以使答案不相关/不正确。如果您有什么要添加到代码中,请附加新版本或询问其他问题。