【问题标题】:Program Crashes When I Compile & Run in Dev C++当我在 Dev C++ 中编译和运行时程序崩溃
【发布时间】:2015-08-25 13:54:08
【问题描述】:
#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 行并崩溃。知道为什么或我的代码中有任何错误导致这种情况吗?

【问题讨论】:

标签: c++ c crash


【解决方案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 一样,并且您的类别始终只有两个字母。

我的编译器另外警告

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

所以你可能也应该考虑放弃它。

【讨论】:

  • 您好 Erik,感谢您的欢迎。我确实尝试过 '== "A1"' 但又出现另一个错误,说 ISO C++ 禁止指针和整数之间的比较。对不起,我是 C 语言的新手。这个问题说明了什么?
  • @DJRaj 如果不查看代码的相关部分,将很难提供帮助。该消息表明您正在将整数与pointer 进行比较,即保存内存地址的变量。特别是如果您是一门语言的新手,您应该确保阅读基础知识,否则您的进度会很慢,并且如果您提出非常基本的问题,本网站上的人不太可能愿意帮助您任何 C++ 入门课程。
  • 顺便说一句,您说您是C 的新手,但在您的问题标题中您说C++。确保您了解您想要使用的语言,因为它们非常不同(即使技术上 C++ 支持 C 的大部分,请参阅例如here
  • 好的,当我在 Dev C++ 程序中运行我的代码时,我将立即编辑这些内容以获得更好的视图和标题。
  • 这就像魔术一样。谢谢,现在这是一个新的学习。它没有显示 strcmp 的任何错误。
猜你喜欢
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
相关资源
最近更新 更多