C程序不断关闭

时间:2014-03-31 03:55:13

标签: c

我有以下程序:

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

当我编译并运行程序时,程序会要求输入名称。输入名称后,会出现警报并关闭程序。该程序曾经工作,但重新启动计算机后,它现在有了这种新的行为。

可能出现什么问题?

1 个答案:

答案 0 :(得分:4)

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

最小 - 请修复您的格式。你让自己更难注意到bug。如果您无法读取代码,则无法对其进行调试。

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

main(char name[31], int phone)

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

int main()
{
  //code here
}

我对定义甚至编译感到有些惊讶。

您可能想要做的只是将namephone声明为main中的常规变量,就像您声明file一样。

编辑:正如@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不为null,则表示您已成功打开文件。你为什么要在不关闭它的情况下重新打开它??

我认为你想要做的就是测试文件是否存在,并附加到文件中,或者创建&amp;如果没有,请打开它。你只需要使用“{”标志,按照fopen docs(强调我的):

  

追加:打开文件末尾的输出文件。输出操作总是在文件末尾写入数据,并将其扩展。重新定位操作(fseek,fsetpos,rewind)将被忽略。 如果文件不存在,则会创建该文件。

因此,如果您只是以追加("a")模式打开文件并确保file不为空,则可以安全地写入该文件。它不会存在,所以你会创建它,或者它会存在,你会打开它。