遇到以下代码的分段错误

时间:2015-04-17 14:38:09

标签: c if-statement segmentation-fault scanf dev-c++

嘿伙计我在学校项目计划中需要帮助,它是switch(),if()... else,if().... else if()...和任何其他构造的组合你需要有正确的输出。

程序规格:

在某公司,加薪如下:

技术人员:工作10年以上的人员为5%。其他人为3%

行政人员:

  • 会计部门人员的6%
  • 营销部门人员占4%
  • 另一个3%
其他员工:增加2%

这里是我的代码,但每次我编译运行它都会得到运行时错误:希望有人可以帮助我,因为我是编程的新手,应有的是明天

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

int main (void) 
{
int currentsalary;
int yearsinservice;
int percent;
float newsalary;
char choice1 ,choice2;



printf("Current Salary: \n");
scanf("%d", &currentsalary);
printf("Staff Category: \n");
printf("T - technical \n");
printf("A - administrative \n");
printf("O - others \n");
printf("Enter the staff Category: \n");
scanf(" %c", choice1);

switch (choice1)
{
       case't':
       case'T': printf("No. of years in Service: ");
                scanf("%d", &yearsinservice);
            if (yearsinservice > 10)
{
                     percent = currentsalary*.05;
                     newsalary = currentsalary + percent;
                     printf("New Salary: %.2f", newsalary);
}
else
{
    percent = currentsalary*.03;
    newsalary = currentsalary + percent;
    printf("New Salary: %.2F", newsalary);
}
    break;

case'a':
case'A': printf("Department where the staff belongs:");
        printf("A - accounting\n");          
        printf("M - marketing\n");
        printf("O - others\n");
        printf("Choose the department:\n");
        scanf(" %c",&choice2);
               if (choice2 == 'a' || choice2 == 'A')
               {
                              percent = currentsalary*.06;
                              newsalary = currentsalary+percent;
                              printf("New Salary: %.2f", newsalary);
               }
               else if (choice2 == 'm' || choice2 == 'M');
               {
                    percent = currentsalary*.04;
                    newsalary = currentsalary+percent;
                    printf("New Salary: %.2f", newsalary);
               }
               else 
               {
                   percent = currentsalary*.03;
                   newsalary = salary+percent;
                   printf("New Salary; %.2f", newsalary);

               }

               break;
               case'o':
               case'O': percent = currentsalary*.02;
               newsalary = currentsalary + percent;
               printf("New Salary: %.2f",newsalary);
               break;
               default: printf("Wrong Input");
               getch();
               }    
               getch();   
               return 0;
               }



结果在样本输出1中应该相同:

目前的薪水:15000
员工类别:
技术
A - 行政
哦 - 其他人
输入员工类别:T
号服务年限:11
新工资:15750.00

<
p>

Ouput2:

目前的薪水:20000
员工类别:
技术
A - 行政
哦 - 其他人
输入员工类别:A
员工所在的部门
A - 会计
M - 营销
O - 其他
选择部门:A
新工资:21200.00

<
p>

Ouput3:

目前的薪水:15000
员工类别:
技术
A - 行政
哦 - 其他人
输入员工类别:O


新薪:15300.00




3 个答案:

答案 0 :(得分:1)

我可以看到

第1点:(您的运行时错误)

 scanf(" %c", choice1);

应该是

scanf(" %c", &choice1);
             ^
             |
        notice here

第2点(您的语法错误)

; A else if阻止case条件之后,您有一个不受欢迎的:。删除它。

答案 1 :(得分:1)

这行有问题

else if (choice2 == 'm' || choice2 == 'M');
                                          ^

在结尾处删除分号;

答案 2 :(得分:0)

您的第一个错误是您正在致电

scanf(" %c", choice1);

何时应该致电

scanf(" %c", &choice1);
             ^
             need the & here

您应该在变量之前添加&(字符串除外)。

您的下一个错误是

else if (choice2 == 'm' || choice2 == 'M');
                                          ^
                                         semicolon not needed

你最后留下了一个分号。删除它。