struct-c-free结构体的问题输入后按回车就出现windows出现问题

问题描述

c-free结构体的问题输入后按回车就出现windows出现问题

#include
struct yuan{
char p; //员工姓名
int b; //基本工资
int c; //职务工资
};

int main()
{ struct yuan a[2];
int i,f,q;
printf("请分别输入员工名字及其基本工资和职务工资:n");
for(i=0;i<3;i++){
scanf("%s%d%d",&a[i].p,&a[i].b,&a[i].c);
}

f=a[0].b+a[0].c;
for(i=0;i<3;i++){
if(f<=a[i].b+a[i].c)
f=a[i].b+a[i].c;
}
for(i=0;i<3;i++){
if(f==a[i].b+a[i].c)
break;
}
printf("%s %d %dn",a[i].p,a[i].b,a[i].c);

      q=a[0].b+a[0].c;
     for(i=0;i<3;i++){
        if(q>=a[i].b+a[i].c)
        q=a[i].b+a[i].c;
    }
    for(i=0;i<3;i++){
        if(q==a[i].b+a[i].c)
        break;
    }
        printf("%s %d %d",a[i].p,a[i].b,a[i].c);
return 0;

}

题目要求是输出最高工资和最低工资总和的员工的姓名和基本工资 职务工资。
调试没问题,运行出来就有 It stopped with signal SIGSEGV,Segmentation fault

菜鸟求教啊。。。。

解决方案

for(i=0;i<3;i++)
{
if(q==a[i].b+a[i].c)
break;
}
printf("%s %d %d",a[i].p,a[i].b,a[i].c);

例如main函数中的这段代码,当你执行for循环的时候,如果没有满足if条件,那么i的值最后会等于3,a[3].p,a[3].b,a[3].c是不存在的,此时如果调用printf输出a[3].p,a[3].b,a[3].c,将访问越界。所以你应该重新考虑一下代码结构及相关循环变量的取值。

补充:struct yuan a[2]; 在这个数组中只有两个元素,所以你循环变量的i值肯定不能写成i<3,而应该写成i<2。

解决方案二:

可是q的值一定会满足三个中的其中一个的啊, for(i=0;i
if(q>=a[i].b+a[i].c)
q=a[i].b+a[i].c;
}

时间: 2024-11-02 20:25:39

struct-c-free结构体的问题输入后按回车就出现windows出现问题的相关文章

visual studio-C语言结构体在VS2013输入时候遇到的问题

问题描述 C语言结构体在VS2013输入时候遇到的问题 IDE:VS2013 OS:Windows7 源码附上: #include<windows.h> #include<stdio.h> int main() { //定义一个People类型的结构体 struct People{ char name[10];//名字 char sex[5];//性别 int age;//年龄 int Class;//班级 }me; //将me声明为People类型的结构体变量 printf(&q

结构体struct、枚举enum、联合体union、位字段、自定义类型typedef、字节对齐

结构体struct 1 结构体的基本知识 2 结构体与函数 3 结构体数组 4 自引用结构体 枚举变量enum 联合体union 位字段 1 一般的方法定义屏蔽吗 2 用位字段来定义屏蔽吗 自定义类型typedef 字节对齐 pragma pachx 按x个字节对齐 1.结构体struct 1.1 结构体的基本知识 #include <stdio.h> struct point{ int x; int y; }p1, p2, p3; struct point pt; struct point

解析C语言中结构体struct的对齐问题_C 语言

首先看一下结构体对齐的三个概念值: 数据类型的默认对齐值(自身对齐): 1.基本数据类型:为指定平台上基本类型的长度.如在32位机器中,char对齐值为1,short为2,int,float为4,double为8: 结构体:其数据成员中默认对齐值最大的那个值. 2.指定对齐值:#pragma pack (value)时的指定对齐值value. 3.数据类型的有效对齐值:默认对齐值和指定对齐值中小的那个值. 有了这些值,我们就可以很方便的来讨论具体数据结构的成员和其自身的对齐方式.有效对齐值N是最

C语言中结构体(struct)的几种初始化方法_C 语言

本文给大家总结的struct数据有3种初始化方法      1.顺序      2.C风格的乱序      3.C++风格的乱序 下面通过示例代码详细介绍这三种初始化方法. 1)顺序 这种方法很常见,在一般的介绍C的书中都有介绍.顺序初始化的特点是: 按照成员定义的顺序,从前到后逐个初始化:允许只初始化部分成员:在被初始化的成员之前,不能有未初始化的成员. 示例: struct User oneUser = {10, "Lucy", "/home/Lucy"}; 2

深入剖析C++中的struct结构体字节对齐_C 语言

什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐. 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同.一些平台对某些特定类型的数据只能从某些特定地址开始存取.比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证

结构体定义 typedef struct 用法详解和用法小结

typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便.具体区别在于:若struct node {}这样来定义结构体的话.在申请node 的变量时,需要这样写,struct node n;若用typedef,可以这样写,typedef struct node{}NODE; .在申请变量时就可以这样写,NODE n;区别就在于使用时,是否可以省去struct这个关键字.   第三篇:struct和typedef struct 分三块来讲述:1 首先:在C中定义一个结

Swift语言精要 - 浅谈结构体(Struct)

CGRect, CGSize, CGPoint这些是 . String, Int, Array, Dictionary这些我们经常用的也是结构体(Struct).   那么结构体(Struct)到底是什么呢? 学过C语言的朋友一定知道它是什么,在这里我就不多说了,你懂的. 我想说的重要的事情是,你必须搞清楚Struct和类的区别,在Swift中这点特别重要.   一下几点区别: 1) 结构体(Struct)不支持继承,而类(Class)则支持. 2) 结构体(Struct)有一个成员初始化器(m

结构体数组的定义和引用(四)

指针变量非常灵活方便,可以指向任一类型的变量,若定义指针变量指向结构体类型变量,则可以通过指针来引用结构体类型变量.7.3.1 指向结构体类型变量的使用首先让我们定义结构体:struct stu{char name[20];long number;float score[4];} ;再定义指向结构体类型变量的指针变量:struct stu *p1, *p2 ;定义指针变量p 1.p 2,分别指向结构体类型变量.引用形式为:指针变量→成员:[例7-2] 对指向结构体类型变量的正确使用.输入一个结构

C++动态分配和撤销内存以及结构体类型作为函数参数_C 语言

C++动态分配内存(new)和撤销内存(delete) 在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除.在C语言中是利用库函数malloc和free来分配和撤销内存空间的.C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数. 注意: new和delete是运算符,不是函数,因此执行效率高. 虽然为了与C语言兼容,C++仍保留malloc和free函数,但建议用户不用malloc和free函数,而用new和delete运算