C程序在最后一次输入后立即崩溃

标签 c

该程序从用户产品名称、产品类别和产品系列中获取输入,然后将其存储到一个文件中。但是在提供输入并按下回车键后,程序崩溃并提示 product.exe 已停止工作。

这是代码-

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

void add_new_product(void);
struct product
{
    char P_name;
    char P_class;
    char P_family;
}P[100];
FILE *fp;
void add_new_product()
{
    char ch;
    int i=0;
    fp=fopen("product.txt","w+");
       do
        {
            clrscr();
            printf("\t\t\t Add New Product");
            printf("\n User:");
            printf("\n\n\n \t\t\t 1.Product Name   :");
            printf("\n\n \t\t\t 2.Product Class  :");
            printf("\n\n \t\t\t 3.Product Family :");
            gotoxy(44,5);
            scanf("%s",&P[i].P_name);
            gotoxy(44,7);
            scanf("%s",&P[i].P_class);
            gotoxy(44,9);
            scanf("%s",&P[i].P_family);
            fprintf(fp,"%s %s %s %s %s %s",P[i].P_family,"|",P[i].P_class,"|",P [i].P_name,";");
        printf("\n \t\t Do you  want to add another product?(Y/N) :");
        scanf("%s",&ch);
        i++;
      }while((ch=='Y')||(ch=='y'));
        fclose(fp);
}

int main()
{
    add_new_product();
    getch();
    return 0;
}

}

最佳答案

当您从 scanf 读取 string 时,您需要修改您的 structure 如下:

#define MAX_LENGTH 100

struct product
{
    char P_name[MAX_LENGTH];
    char P_class[MAX_LENGTH];
    char P_family[MAX_LENGTH];
}P[100];

关于C程序在最后一次输入后立即崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30738785/

相关文章:

c - 二维数组的动态内存分配

c - Endianness——为什么 chars 将 Int16 打印倒过来?

c - 从整数数组到文件的奇怪输出

c++ - 复制调用功能

C: Cppcheck:可能的空点取消引用

c++ - Makefile:强制项目在构建时使用动态或静态库

c++ - jpeg_decompress_struct 结构大小不匹配

c - 使用 openmp 的段错误(核心转储)

c - 解析参数数量不确定的命令行

c - 我如何读取两个数组中包含两列的文件?