编译时程序崩溃&在Dev C ++中运行

时间:2015-08-25 13:54:09

标签: c++ c crash

#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("\n\n 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 INPUT\n");
 }
 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("\n\n INPUT NOT VALID");

我没有看到代码中的任何错误,除了第25行,其中说明了多字符字符常量警告,但程序一直工作到第39行并崩溃。知道为什么或者我的代码中是否有任何错误导致这种情况?

1 个答案:

答案 0 :(得分:1)

至少存在两个问题,编译器已经指出了其中一个问题: 'A1'不是单个字符,而是用单引号(')括起来的。你需要双引号。

此外,可能更重要: 您实际上没有在第25行执行比较,您更改 category(= vs ==)的值,这意味着如果您的输入没有任何内容,您也将输入此条件与A1有关,因此其他内容可能错误或不适合输入此if

编辑:如果您确实使用了C,那么您应该使用差异函数来比较this page中指向的this thread中指示的字符串

所以你需要至少添加

#include <string.h>

然后将if更改为

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

我假设您将category变量的定义更改为例如char[50]name一样g_stop,您的类别始终只有两个字母。

我的编译器另外警告

  

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

所以你也应该考虑远离那个。