伙计们可以帮我解决这个问题吗?这个程序在执行后崩溃,可以帮我识别出任何错误吗? [英] Guys can help me out with this program? This program crash after executed, can help me identify any error?

查看:61
本文介绍了伙计们可以帮我解决这个问题吗?这个程序在执行后崩溃,可以帮我识别出任何错误吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

/* i'm working on a program to compute worker paycode, and the output */
#include <stdio.h>


void instruct (void);
void pause ();

int main()
{
	int paycode, 
	    Manager    = 0,     //Manager
	    HourWorker = 0,     //Hourly Worker
        ComWorker  = 0,     //Commission Worker
	    PieWorker   = 0;     //Piece Worker
 double salary;
	
	instruct ();
	printf("------------------------------------------------------------------------------\n");
	printf("Paycodes (1= Manager, 2= HourlyWorker, 3= CommissionWorker, 4= PieceWorker)\n (-1 To Terminate Program)\n");
	printf("------------------------------------------------------------------------------\n");
	printf("\nEnter Paycode :");
	scanf("%d", paycode);
	
	while (paycode != -1)
	{
		switch(paycode)
		{
			case 1: 
			Manager++;
			printf("Manager Selected\n");
			printf("Enter Weekly Salary: \n");
			scanf("%f", salary);
			printf("Manager's Total Salary is %2f\n", salary);
			break;
			
			case 2: 
			double wage;
			int hours;
			HourWorker++;
			printf("Hourly Worker Selected\n");
			printf("Enter Hourly Salary: \n");
			scanf("%f", wage);
			printf("Enter Total Hours Worked\n");
			scanf("%d", wage);
			
			if(hours <= 40)
				salary = hours * wage;
			else
				salary = 40 * wage + (hours - 40) * wage * 1.5;
			printf("Hourly Worker's Total pay is %2f\n", salary);
			break;
			
			case 3: 
			int sales;
			ComWorker++;
			printf("Commission Worker Selected\n");
			printf("Enter Gross Weekly Sales: \n");
			scanf("%d", sales);
			salary = sales * 0.057 + 250;
			printf("Commission Worker's Total Salary is %2f\n", salary);
			break;
			
			case 4: 
			int pieces, wagePiece;
			PieWorker++;
			printf("Piece Worker Selected\n");
			printf("Enter Number of Pieces: \n");
			scanf("%d", pieces);
			printf("Enter Wage Per Piece: \n");
			scanf("%d", wagePiece);
			salary = pieces * wagePiece;
			printf("Piece Worker's Total Salary is %2f\n", salary);
			break;
		}
	printf("------------------------------------------------------------------------------\n");
	printf("Paycodes (1= Manager, 2= HourlyWorker, 3= CommissionWorker, 4= PieceWorker)\n (-1 To Terminate Program)\n");
	printf("------------------------------------------------------------------------------\n");
	printf("\nEnter Paycode :");
	scanf("%d", paycode);
	}
	
	printf("\t-------------------------------------");
	printf("\n\t| Number of Employees Paid		: ");
	printf("%d,%d,%d,%d", Manager ,HourWorker , ComWorker ,PieWorker);
	printf("\t\t|\n\t| Number of Managers Paid  : %d", Manager);
	printf("\t\t|\n\t| Number of Hourly Workers Paid  : %d", ComWorker);
	printf("\t\t|\n\t| Number of Piece Workers Paid  : %d", PieWorker);
	printf("\t\t|\n\t-------------------------------");
	
	pause();
	return 0;
}	
void instruct(void)
{
	printf("\tThis Program Will Calculate The Weekly Pay For Each \n");
	printf("\temployee, List The Total NUmber Of Employees Paid    \n");
	printf("\tAnd The Total Number Of Managers, Hourly Workers,     \n");
	printf("\tCommission Workers And Piece Workers Paid For The Week. \n");
	
}
void pause()
{
	
	printf("\nPress any key to continue....");
	getch();
	printf("\r");
	printf("   						");
	printf("\r");
	
}

推荐答案

你必须传递所有 scanf()的指针参数:

You must pass pointers for all scanf() arguments:
double wage;
// Wrong
//scanf("%f", wage);
// Correct
scanf("%f", &wage);


除了Jochen对scanf的评论 - 你对于案例2有一个复制/粘贴错误。



In addition of Jochen's comments on scanf - you have a copy/paste bug for case 2.

printf("Enter Hourly Salary: \n");
scanf("%f", wage);
printf("Enter Total Hours Worked\n");
scanf("%d", wage);





...应该......





... should be ...

printf("Enter Hourly Salary: \n");
scanf("%f", &wage);
printf("Enter Total Hours Worked\n");
scanf("%d", &hours);


这篇关于伙计们可以帮我解决这个问题吗?这个程序在执行后崩溃,可以帮我识别出任何错误吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆