2014-04-01 34 views
1

这是一个类项目的程序。假设能够创建和编辑结构。 CreatRec功能正常工作。对于ModifyRec,我试图通过指针将数组发送给它,以避免“复制”数据。但是,我无法实际更改数组。 ATM底部的行(gr [change] .lastname = * info;)完全不起作用。我真的不知道我在这里做错了什么。使用具有结构的指针将数据传递给函数

#include "stdafx.h" 
#include <string.h> 
#include <stdlib.h> 

struct student{ 
    int recordname; 
    char lastname[10]; 
    char firstname[10]; 
    float math; 
    float english; 
    float science; 
}; 

//prototypes 
int menu(); 
struct student CreatRec(int); 
void ModifyRec(struct student*); 


void main() 
{ 
    int option, j;//option will be for users menu choice, j makes for loop work for creatrec 
    struct student grades[10]; 
    j = 0; 
    option=Menu(); 
    if (option == 1) 
     for (j = 0; j<10; j++) 
      (grades[j + 0]) = CreatRec(j); 
    else if (option==2) 
     ModifyRec(grades);//dont need & is smart bc array 


    printf("%s",grades[0].lastname);//This line is checking to see if ModifyRec actaully worked 

    //free(grades);2 
    while (1); 
} 


int Menu() 
{ 
    int choi; 
    printf("Please choose one of the following options.\n 1) Create New Student Records.\n 2) Modify an Existing Student Record\n"); 
    printf(" 3) Print a New Sutdent Record.\n 4) Quit\n"); 
    scanf("%d", &choi); 
    return choi; 
} 
struct student CreatRec(int i) 
{ 
    struct student qr; 
    //qr = (struct student*)malloc(sizeof(struct student)*6); 

    printf("RecordNum %i\n", i); 
    printf("Please enter last name-->"); 
    scanf("%s", &qr.lastname); 
    printf("Please enter first name-->"); 
    scanf("%s", &qr.firstname); 
    printf("Please math grade-->"); 
    scanf("%f", &qr.math); 
    printf("Please english grade-->"); 
    scanf("%f", &qr.english); 
    printf("Please science grade-->"); 
    scanf("%f", &qr.science); 
    return qr; 
} 

void ModifyRec(struct student gr[]) 
{ 
    int change; 
    char feild[10], info[10]; 

    printf("Which record would you like to change?\n"); 
    scanf("%d", &change); 
    rewind(stdin); 
    printf("Which feild would you like to edit?\n"); 
    scanf("%s", &feild); 
    rewind(stdin); 
    printf("Enter info\n"); 
    scanf("%s", &info); 

    if (!strcmp("lastname", feild)) 
     gr[change].lastname= *info;//NOT WORKING 

} 
+0

为什么C++标记?一个错字? – Manu343726

+0

该网站为我写了这个标签 – user3486669

+0

它被允许在下一次我没有倒带 – user3486669

回答

0

gr[change].lastname是一个char数组,不是指针。你不能重新分配它。在这种情况下,您可能应该完成scanf("%s", gr[change].lastname);并跳过char info[10]

+0

好的时候输入信息,但后来我怎么让他们编辑其他字段,(firstname)等等说我应该每个人都有scanf(“%s”,FEILD)? – user3486669

+0

你可以。另一种可能是设置'char * destination'指向特定的字段,然后设置'scanf(“%s”,destination)'。 – guest

1

首先我没有看到一个伟大的意义在声明中

for (j = 0; j<10; j++) 
     (grades[j + 0]) = CreatRec(j); 

的表达grades[j + 0]这些陈述

printf("Please enter last name-->"); 
scanf("%s", &qr.lastname); 
printf("Please enter first name-->"); 
scanf("%s", &qr.firstname); 

已被取代

printf("Please enter last name-->"); 
scanf("%s", qr.lastname); 
printf("Please enter first name-->"); 
scanf("%s", qr.firstname); 

而这个说法

if (!strcmp("lastname", feild)) 
    gr[change].lastname= *info;// 

必须被取代

if (!strcmp("lastname", feild)) 
    strcpy(gr[change].lastname, info); 
+0

好的,你的第二个替代品很棒,非常感谢!然而,第一个,它并没有工作之一,它下降到在整数扫描。至于第一位,我有一个10个结构的数组,所以我必须用creatrec – user3486669

+0

@ user3486669来填写所有10个数据。必须在每个输入数据正确后输入ENTER键。 –

+0

林不太清楚我明白你的意思 – user3486669