标题:关于结构体数组赋值的问题
只看楼主
knightfyx
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2018-3-7
结帖率:100%
已结贴  问题点数:20 回复次数:4 
关于结构体数组赋值的问题
来自谭浩强书Chapter9的基础题目,系统win10,IDE是visual studio2017。
问题:scanf为结构体数组赋值时,成员数组最后一个值总是被下一次scanf的输入值覆盖。
请看源程序:
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct
{
    int num;
    char name[5];
    int score[2];
}Student;
void main() {
    void printdata(Student*,int);
    Student s[2];
    int lp = 0;
    for (lp = 0; lp <= 2; lp++)
    {
        printf("record num score*3\n");
        scanf_s("%d %d %d %d", &s[lp].num, &s[lp].score[0], &s[lp].score[1], &s[lp].score[2]);
        fflush(stdin);//清空输入流
        printf("name\n");
        scanf_s("%s", s[lp].name,6);
        fflush(stdin);//清空输入流
        printf("%d", s[lp].score[2]);//被覆盖的值在本轮内赋值是没问题的
    }
    printf("num name score1 score2 score3\n");
    for (lp = 0; lp <= 2; lp++)
    {
        printf("%3d %4s %6d %6d %6d\n", s[lp].num, s[lp].name, s[lp].score[0], s[lp].score[1], s[lp].score[2]);

    }
    system("pause");


就是说s.score[2]的值被s+1.num的值覆盖了,这是为何呀,求大神们解答。
此外还有一事相求,不知为何visual studio的“局部变量”似乎并没有显示结构体变量成员的值,不知道各位有没有什么方法能够看到它们,或者有好的plugin推荐。
初学菜菜感激不尽。
搜索更多相关主题的帖子: score 结构体 name num printf 
2020-06-02 13:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
&s[lp].score[2]
哪来的 score[2]? 你定义的是 int score[2];,那么就只有 score[0] 和 score[1].

fflush(stdin);//清空输入流
这种错误用法竟然成了惯用法了?
2020-06-02 13:17
knightfyx
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2018-3-7
得分:0 
回复 2楼 rjsp
哦哦,感谢感谢大神,原来是这么简单的错误,我都没发现。那个fflush(stdin)是完成题目图省事的用法就请不用在意了。另外,如何让visual studio在调试时监视结构体变量成员的值呢?
2020-06-02 13:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
如何让visual studio在调试时监视结构体变量成员的值呢?
与监视非结构体变量有任何不同吗?

程序代码:
#include <stdio.h>

typedef struct {
    int num;
    char name[5];
    int score[2];
} Student;

int main( void )
{
    Student s[2];
    for( size_t i=0; i!=2; ++i )
    {
        printf( "input num: " );
        scanf_s( "%d", &s[i].num );

        printf( "input name: " );
        scanf_s( "%s", s[i].name, 5 );

        printf( "input score1: " );
        scanf_s( "%d", &s[i].score[0] );

        printf( "input score2: " );
        scanf_s( "%d", &s[i].score[1] );
    }

    printf( "num name score1 score2\n");
    for( size_t i=0; i!=2; ++i )
        printf( "%3d %4s %6d %6d\n", s[i].num, s[i].name, s[i].score[0], s[i].score[1] );
}

2020-06-02 13:33
knightfyx
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2018-3-7
得分:0 
回复 4楼 rjsp
是可以的,我自己visual studio用得并不熟,总之还是很感谢了
2020-06-02 13:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501924-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017353 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved