我正在开发一个C语言程序,该程序为员工收集姓名,费率和工时等数据。事情是我需要使用struct
。
我正在尝试将结构数组传递到load()
函数中,用户将在其中输入员工的姓名,工作时间和薪资水平,但看来我做错了。你能告诉我怎么了吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 3
int i = 0;
struct Employee
{
char name[20];
float rate;
float hours;
}employee;
void load(struct Employee *guys);
void printout();
void edit();
void realedit();
void print();
int main(void)
{
int x=0;
struct Employee guys[size];
while (x != 5)
{
printf("Main Menu\n");
printf("1. Add Employee\n");
printf("2. Edit Employee\n");
printf("3. Print Employee\n");
Printf("4. Print All Employees\n");
printf("5. Quit");
scanf_s("%d", &x);
switch (x)
{
case 1: load(guys[i]);
break;
default: printf("Please enter valid option.\n\n");
break;
}
}
system("pause");
return 0;
}
void load(struct Employee *guys)
{
puts("\ntype name:\n");
scanf_s("%s", &guys[i]->name, 20);
puts("\ntype hourly rate:\n");
scanf_s("%f", &guys[i]->rate);
puts("\ntype hours worked:\n");
scanf_s("%f", &guys[i]->hours);
i++;
}
答案 0 :(得分:4)
使用
import os
from django.db import models
from django.utils.translation import gettext, gettext_lazy as _
from utils.validators import validate_file_extension
from utils.generic import content_file_name
from users.models import User
# Create your models here.
class Users(models.Model):
owner = models.ForeignKey(User, verbose_name='published by', on_delete=models.CASCADE)
name = models.CharField(_('name'), max_length=140)
file = models.FileField(_('file'), upload_to=content_file_name,
validators=[validate_file_extension])
type = models.CharField(max_length=5, editable=False, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
verbose_name_plural = _('My users')
def __str__(self):
return self.name
def save(self, *args, **kwargs):
ext = os.path.splitext(self.file.name)[1]
if ext:
self.type = ext
try:
model = Users.objects.get(id=self.id)
if self.file != model.file:
model.file.delete()
except: pass
return super(Users, self).save(*args, **kwargs)
在您的程序中,您正在按值将load(guys[i]);
数组的第i
个元素传递给guys
。因此,load()
中使用的实际上是一个副本更改,不会影响到load()
中的原始值。
相反,您可以像这样将指向第main()
个元素的指针传递到i
load()
并使用load(&guys[i]);
运算符访问->
内部的变量。
struct
因为我们一一处理元素,所以无需使用void load(struct Employee *guys)
{
puts("\ntype name:\n");
scanf_s("%s", guys->name, 20);
puts("\ntype hourly rate:\n");
scanf_s("%f", guys->rate);
puts("\ntype hours worked:\n");
scanf_s("%f", guys->hours);
}
进行索引。
在
[i]
该函数需要数组的基地址。所以用
scanf_s("%s", &guys[i]->name, 20);
随着数组名称衰减为指向数组第一个元素的指针。
关于您在{p>中使用scanf_s("%s", guys[i]->name, 20);
system()
考虑阅读 Why should the system() function be avoided in C and C++?。
此外,请注意,puts()
将在末尾自动打印system("pause");
。因此,如果您认为合适,则可以取消使用\n
。
您有一个小错字。
\n
应该已经
Printf("4. Print All Employees\n");