gpt4 book ai didi

C程序不断关闭

转载 作者:太空宇宙 更新时间:2023-11-04 06:29:03 25 4
gpt4 key购买 nike

我有以下程序:

#include <stdio.h>
#include <conio.h>

main(char name[31], int phone)
{
FILE *file;
file=fopen("data.txt","w");

if (file==NULL)
{
file=fopen("data.txt","w");
printf("Name : ");
scanf("%s",&name);
printf("\nPhone number : ");
scanf("%d",&phone);
printf("Your booking number is : ");
fprintf(file,"%s;%d\n",name,phone);
fclose(file);
}
else
{
file=fopen("data.txt","a");
printf("Name : ");
scanf("%s",&name);
printf("\nPhone number : ");
scanf("%d",&phone);
fprintf(file,"%s;%d\n",name,phone);
fclose(file);
}
}

当我编译并运行程序时,程序要求输入名称。输入名称后,会出现警告并关闭程序。该程序过去可以运行,但在重新启动计算机后,它现在出现了这种新行为。

可能出了什么问题?

最佳答案

这个程序有一些相当严重的问题。

最小的优先 - 请修正您的格式。你让自己更难注意到错误。如果您无法阅读您的代码,就无法对其进行调试。

接下来是您的 main 函数声明:

main(char name[31], int phone)

这不是您定义 main 的方式。它的定义必须是这样的:

int main()
{
//code here
}

我有点惊讶这个定义甚至可以编译。

您可能想要做的只是将 namephone 声明为 main 中的普通变量,就像您声明 文件

编辑:正如@Namfuak 在评论中指出的那样,main 可以采用替代形​​式:

int main(int argc, char** argv)
{
//code here
}

在这种形式中,argc 保存命令行上传递给程序的参数数量,argv 保存参数本身。但是,您不需要此表单,因为您正在从 stdin 获取用户输入。只需无参数的 int main() 版本就足以满足您的需求。

继续您的文件访问...

file=fopen("data.txt","w");

if (file==NULL)
{
file=fopen("data.txt","w");

您正在尝试打开该文件,如果打不开,您是否会再次打开它?请不要那样做。这不是一个好主意;如果文件一次都打不开,再试一次也不会为您做任何特别的事情。

同样,

else
{
file=fopen("data.txt","a");

这也不是一个好主意。如果 file 不为空,则表示您已成功打开文件。你为什么要在不关闭它的情况下尝试重新打开它...?

在我看来,您正在尝试做的是测试文件是否存在,如果存在则附加到它,如果不存在则创建并打开它。不过,根据 fopen docs,您只需要使用“a”标志即可(强调我的):

append: Open file for output at the end of a file. Output operations always write data at the end of the file, expanding it. Repositioning operations (fseek, fsetpos, rewind) are ignored. The file is created if it does not exist.

因此,如果您只是以追加 ("a") 模式打开文件并确保 file 不为空,您就可以安全地写入它。要么它不存在,您将创建它,要么它存在,您将打开它。

关于C程序不断关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22753368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com