当我在开发C++中编译和运行时程序崩溃

Program Crashes When I Compile & Run in Dev C++

本文关键字:运行时 程序 崩溃 编译 开发 C++      更新时间:2023-10-16
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{
float gross=0,otp=0,ot=0,pay=0;
int IC,hours=0;
char name[50];
char category;
char rep = 'y';

while(rep == 'y')
{
printf("nn Name : ");
gets(name);
printf("n NRIC : ");
scanf ("%d",&IC);
printf("n Category  : ");
scanf ("%s",&category);
printf("n Total Hours  : ");
scanf("%d",&hours);
if (category = 'A1')  //Line 25
{
 if (hours < 44)
 {
    printf("n INVALID INPUTn");
 }
 else if (hours >= 44 && hours <= 60) 
 {
    gross= 44*5;
    ot= (hours-44)*(1/2*5);
    pay=gross+ot;
     printf("n          Syarikat Smart Store Hypermarket Sdn. Bhd. ");
     printf("n  =============================================================="); //Line 39
     printf("n Name: %s", name);
     printf("n NRIC: %d", IC);
     printf("n Category: %s", category);
     printf("n Total Hours: %d", hours);
     printf("n Gross Pay: RM %.2f", gross);
     printf("n Overtime Pay: RM %.2f", ot);
     printf("n Net Pay: RM %.2f", pay);
 }
 else 
  {
     printf("nn INPUT NOT VALID");

我在代码中没有看到任何错误,除了第25行,它声明多字符字符常量警告,但程序工作到第39行并崩溃。任何想法为什么或有任何错误在我的代码,导致这一点?

至少有两个问题,其中一个已经被编译器指出:'A1'不是单个字符,您可以将其括在单引号(')中。你需要双引号。

除此之外,可能更重要的是:您实际上并没有在第25行中执行比较,而是更改了 category的值(= vs ==),因此这意味着如果您的输入与A1无关,那么您也将进入此条件,因此其他事情可能是错误的或不适合输入此特定的if

编辑:如果您确实在使用C,那么您应该使用差异函数来比较您的字符串,如该页所示,在此线程中指向

所以你至少需要加上

#include <string.h>

然后将if更改为

  if ( strncmp(category,"A1",2) == 0 )  //Line 25  

我假设您将category变量的定义更改为char[50],就像您对name所做的那样,并且您的类别总是只有两个字母。

我的编译器还警告

警告:' char* gets(char*) '已弃用

所以你可能也应该考虑远离这个