C编程-如果加载函数被破坏,如何停止计数



我有一个问题需要问。希望有人能帮我。

我正在编写一个函数,通过参数传递和引用传递,提示用户输入姓名、工作小时数和小时费率。如果用户在任何字段中输入"-1",则中断该功能。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct userdata
{
char name[20];
float hours;
float rate;
float gross;
float base;
float overtime;
float taxes;
float net;
}data;
int LoadEmployeeFromKey(data *d)
{
char name[20];
float rate, hours;
printf("Enter an employee name: ");
scanf_s("%s", name, 20);
if (strcmp(name, "-1") == 0)
return;
printf("Worked Hours: ");
scanf_s("%f", &hours);
if (hours == -1.0f)
return 1;
printf("Hourly rate: ");
scanf_s("%f", &rate);
if (rate == -1.0f)
return 1;
strcpy_s(d->name, 20, name);
d->hours = hours;
d->rate = rate;
return 1;
}

这里没有什么问题,这个功能运行良好。但当我在main((中工作时,真正的问题是。

void main()
{
data employee[10];
int count = 0;
int option;
int stop = 0;
int i = 0;
FILE EmployeeFromFile[20];
FILE *File;
while (!stop)
{
puts("---Main Menu---n");
puts("CHOOSE A FOLLOWING OPTION:");
puts("1. Add an employee info from keyboard.");
puts("2. Add employees info from a text file.");
puts("3. Print all employees info.");
puts("4. Edit an employee info.");
puts("5. Print an employee and salary.");
puts("6. Print all employees and salary.");
puts("7. Save and Quit the program.n");
scanf_s("%d", &option);
switch (option)
{
case 1:
LoadEmployeeFromKey(&employee[count]);
Calculation(&employee[count]);
count++;
break;

请忽略其他事情,当我调试时,如果我在(名称、小时或费率(的任何字段中输入"-1",它就会中断并返回"主菜单";然而,当我选择3->6时,"count"仍然在计数(它仍然加1(,导致错误输出。这可能是一个愚蠢的问题,但老实说,我不知道我应该在哪里或什么类型来搜索来解决这个问题。我可以看到反对票,但请帮忙。

谢谢。

函数LoadEmployeeFromKey被声明为返回,并且大多数return语句都返回值。

问题有两个方面:首先,函数(除一种情况外(总是返回相同的值,从而无法区分不同的情况;第二个问题是,您没有检查函数返回的内容,因此不可能在此基础上添加条件。

首先,确保所有返回语句都实际返回一个值(否则,您将有未定义的行为(。如果输入是"-1",则返回一个值,如果完全初始化结构,则返回一些其他的值。最后,使用返回的值检查是否应该增加计数器。


首先,你必须(可能已经(有一个合适的功能原型:

int LoadEmployeeFromKey(data *d);

其次,您使用了以前返回值的函数?

假设函数在成功时返回1,当所有字段都已正确输入和初始化时,否则返回0,那么您可以在条件下直接使用它:

if (LoadEmployeeFromKey(&employee[count]) == 1)
{
// All data valid
Calculation(&employee[count]);
count++;
}

如果函数没有返回1,那么就不要做任何特别的事情。

最新更新