gpt4 book ai didi

C编程-如果加载函数中断,如何停止计数?

转载 作者:太空宇宙 更新时间:2023-11-04 03:16:05 24 4
gpt4 key购买 nike

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

我正在编写一个函数,使用参数传递和引用传递提示用户输入姓名、工作时间和小时费率。如果用户在任何字段中输入“-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 时,“计数”仍在计数(它仍然加 1)导致错误输出。这可能是一个愚蠢的问题,但老实说,我不知道我应该在哪里或输入什么来搜索解决这个问题。我可以看到反对票,但请帮忙。

谢谢。

最佳答案

您的函数 LoadEmployeeFromKey 被声明为返回一个,并且您的大多数 return 语句确实返回一个值。

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

首先确保所有返回语句实际返回一个值(否则你将有 undefined behavior )。如果输入是 "-1",则返回 一个 值,如果完全初始化结构,则返回一些 other 值。最后,使用返回值来检查是否应该增加计数器。


首先,您必须(可能已经)有一个合适的函数原型(prototype):

int LoadEmployeeFromKey(data *d);

其次,您曾经使用过返回值的函数?

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

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

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

关于C编程-如果加载函数中断,如何停止计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51693369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com