【C语言】结构体数据处理异常问题

每个城市信息由城市名(字符串)和位置坐标组成(x,y)。设计实现一程序,完成如下功能:
(1)从键盘或文件输入各城市信息
(2)按城市名字非递减排序后输出
(3)输入某个位置信息,查询该位置的城市名称,要求能多次查询。

 #include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 20

typedef char ElemType; 
struct info
{
    ElemType name[MAXSIZE];
    int x;
    int y;
};

int main()
{
    struct info city[MAXSIZE];
    //从键盘输入信息
    int i=0,count=0;
    printf("请输入城市名和位置坐标x,y,以空格键隔开(输入“q 0 0”以结束):");
    while((scanf("%s %d %d",city[i].name,&city[i].x),&city[i].y)!=0)
    {
        if(i>=MAXSIZE)
        {
            printf("超出最大输入个数!");
            break;
        }
        if(strcmp(city[i].name,"q")==0)
         break;
        i++;
        count++;
        printf("请输入城市名和位置坐标x,y,以空格键隔开:");
    } 

    //排序
    int m,n;
    struct info temp;
    for(m=0;m<count-1;m++)
    {
        for(n=0;n<count-m-1;n++)
        {
            if(strcmp(city[n].name,city[n+1])>0) 
            {
                temp=city[n];
                city[n]=city[n+1];
                city[n+1]=temp;
            }
        }
    }

    //按非递减顺序输出
    for(i=0;i<count;i++)
    {
        printf("%s  %d  %d  \n",city[i].name,city[i].x,city[i].y);
    } 


    //查询
    int x,y;
    printf("请输入您要查找的位置坐标x,y,之间以空格隔开,以“q q”结束操作:");
    while(scanf("%d %d",&x,&y)!=0)
    {
        for(i=0;i<count;i++)
        {
            if(x==city[i].x&&y==city[i].y)
             {
                printf("\n您要查找的城市为 %s ",city[i].name);
                break;
             }
            else if(i==count-1)
            {
                printf("\n未找到匹配的城市!");
            }
        }
    } 
    printf("\n感谢您的使用,再见!");

    return 0;
}

代码运行正常,排序、查找功能都正常,但输入数据后,输出(打印在屏幕上)的数据坐标y全部变为0,请问这是怎么回事,看了很久没有看出来

0
扫码支付0.1元 ×
其他相关推荐
C语言 文件I/O:实现结构体数据 存储到文件和从文件读取
这是一个初步试验!是为了下一步的创建班级学生管理系统做准备 ClassInfo.h源码 #define MAX_STUDENT 50 //班级最大学生人数 #define MAX_NAME_SPACE 30 //学生名称最大空间 #define MAX_CLASS_NAME_SPACE 20 //班级名称最大空间 #define MAX_ID_SPACE 20 //班级ID最大空间
笔试题:C语言分配内存的方式及常见的内存错误
 分配内存的方式: 1、从全局区(静态存储区域)分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 3、从堆上分配,亦称动态内存分配。程序在运行的
C语言结构体与共用体
C语言结构体与共用体,C语言结构体与共用体的使用方法介绍
C语言之强大的结构体
一,struct 自定义类型介绍 一门语言通常先定义基本数据类型,还有很多自定义类型,不可能由语言一一实现。于是乎,给出一个struct关键字,开放自定义类型权限,于是便有了所有类型。此之谓“一生二,二生三,三生万物”。 二,结构体类型定义 1,无名结构体类型 不带来多余的类型名,只可在定义类型时定义变量。 #include&amp;lt;stdio.h&amp;gt; #include&amp;l...
C语言定义结构体的几种方法
1. 先定义结构体类型,再定义结构体变量。 struct student{ char no[20]; //学号 char name[20]; //姓名 char sex[5]; //性别 int age; //年龄 }; struct student stu1,stu2; //此时stu1,s...
C语言结构体学习总结
C语言中包含short、int、long、char、float、double这六中基本数据类型。当然还有构造类型、指针类型、和空类型。如图所示: 今天,我们着重总结一下构造数据类型中的结构体 (关键字:struct,不能省略) 的相关知识。 1.什么是结构体? 结构体是一种工具,用这个工具可以定义自己的数据类型。同时,从上图可以看出结构体属于构造数据类型。 2.结构体与数组的比较 (...
浅析C语言中的结构体
结构体:是一系列有相同类型或不同类型构的数据构成的数据集合。结构体的学习可以从以下几个方面开始:一.结构体类型的声明。struct tag{member-list;} vaeriable-list;注:tag 要做到见名知义,可以省略但是不建议省略      member-list 不能为空     veriable-list 建议省略(在需要的时候在声明)例如建造一个学生的结构体struct s...
对C语言 结构体 和 结构变量
一、结构体/结构的引入在学生的登录记录表中,姓名应该为字符型、学号可以为整形或字符型,年龄应该为整形,性别应该为字符型,成绩可以整形或实型。显然不能用一个数组来存放这一组数据,因为数组各元素的类型和元素都必须一致。二、定义结构为了定义结构,必须用struct语句。struct语句定义了一个包含多个成员的新的数据类型。Struct 结构名 { 成员列表; }变量名列表; Struct stu { ...
c语言结构体嵌套
转载自:https://blog.csdn.net/zhudong10/article/details/49496221 C语言中结构体是一种构造类型,和数组、基本数据类型一样,可以定义指向该种类型的指针。结构体指针的定义类似其他基本数据类型的定义,格式如下 struct 结构体名 * 指针名; 比如: struct person{char[20] name; int age;};//先定...
C语言直接返回结构体汇编后结果
(以下为使用vc以及debug编译下的结果)一般来说,返回小于等于4字节的基本类型,例如short,int,都是直接使用eax寄存器返回,而指针,也是使用eax寄存器返回。 如果是8字节的基本类型,例如c++的long long 类型,很可能是使用两个寄存器,如eax和edx返回结果。 实际上,如果结构体或者说类只占8字节或者更小的话,也是直接使用寄存器返回的。 但是如果结构体占用空间比较大,
C语言小结--结构体
1 什么是结构体 结构体是一种聚合数据类型,它是一种数据元素的聚合。比如我们描述一个学生时,要求有他的姓名、学校、分数等等信息,在之前的处理中,我们通常会使用单独的数据类型来描述。比如,定义一个字符串数组来描述姓名char name[20] = &amp;amp;quot;xiaoming&amp;amp;quot;,定义一个浮点数来描述成绩float f = 96.5等等。但是这种做法有个缺点。所有的这些数据都是为了描述一个学生来定义的,但是它...
C语言中结构体的拷贝
版权声明:本文为博主原创文章,未经博主允许不得转载。 结构体是一种数据结构,类似 C++的类。 结构体中 可能包含 很多种变量: (整型,浮点型,结构体,指针); 结构体在定义的时候请尽量保持:低字节变量在前,低字节变量在后,这样 可以提高代码质量和内存的利用率.(关于结构体的大小暂不讨论) 设结构体 Data如下: [cpp] view
C语言结构体的简单使用实例
结构体的简单实例
C语言之复杂结构体的访问
任意一个可以在结构外部声明的变量都可以作为结构的成员. 包括数组, 指针, 其他结构等. 对于结构成员的访问可以使用 点操作符(.) 和 箭头操作符(-&amp;gt;) 完成. 本文举例介绍复杂结构体成员的访问. 结构体声明如下: // 创建新的结构类型Tag typedef struct { int num; short date[3]; } Tag; // 创建新的结构类型Ms...
C语言中结构体大小的计算(内存对齐详解)
首先来看一个例子; struct S { char a; int b; char c; }; 我们先来计算一下这个结构体的大小,如果不存在内存对齐这个问题,按理说这个结构体应该占(1+4+1)6个字节;然而事实上它占了12个字节,为什么?我们需要解决下面几个问题。 1.为什么存在内存对齐 平台原因(移植问题):一些资料上是这样说的,“不是所有的硬件平台都能...
C语言字符串与结构体
C语言字符串与结构体
C语言结构体内存分布
1、字节对齐是为了提高效率,因为因为硬件平台的不同,数据总线可能从特定地址读取数据。 2、原则                 1、按数据类型自身地址对齐                  2、整个结构体所占内存是成员变量中占  内存最大的变量的  整数倍 3、举例子 注意,变量的顺序不同,可能所占的空间也不一样。 为
C语言结构体内存分配问题
C语言结构体服从以下原则: 1.内存对齐   1.结构体大小必须是结构体占用最大字节数成员的整数倍,这样在处理数组时可以保证每一项都边界对齐   2.结构体的每一个成员起始地址必须是自身类型大小的整数倍   3.字节对齐取决于编译器,Keil默认4字节 typedef struct { u8 a; u8 b; short c; }STORE_INFO; STOR...
C语言中结构体占用内存大小
这个问题很经典,很容易出现,也叫内存的4k对齐吧   相关知识: cpu传输数据的方式: cpu每次传输数据大小由它的总线条数决定,32位传输4个字节,64位传输8个字节。 这里以64位系统举例,若声明一个变量大小为8字节,起始地址位1,而cpu读取的地址为0~7, 则该变量需要读取两次,显然降低了cpu的性能。            为提高cpu读取的性能,采用补齐的方法提高cpu...
C语言基础:C语言结构体(7) - 结构体的嵌套使用
上一节, 我们讲解了结构体与函数, 这次我们来讲解一下结构体的嵌套使用. 比如有一个学生, 我需要知道他的学号, 生日年月日, 入学年月日, 如果用结构体我们需要怎么做呢? 按照常规的定义, 就像下面的例子: #include int main() { struct Date { int number; //学号
C++中结构体与C语言中结构体的区别
在C语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行了扩...
C语言关于结构体大小的问题
C语言结构体若没有特殊定义,大小都是按照结构体中最大的元素为单位来计算的例如 typedef struct _A { int a; char b; }A; A结构体大小为8字节 若想不按照此规则来定义结构体大小,也就是结构体每个元素占用了多大实际结构体占用大小就是元素的总和的话,则需要在结构体前后加上 #pragma pack(push) #pragma pack(1) typ...
c语言结构体 链表
着两天都是看书没有写代码就把看书的心得思考写下来 先来说说对于内存的看法 因为对于内存机制的理解有助于对于后面的东西的理解 结构体 结构体就是讲多个函数 变量 数组相互链接起来的东西 大概类似于原来多个数据存在磁盘的各个扇区不同的位置,但是你只要写了一个结构体就会调用cpu快速的去找到各个成员的位置将他们关联起来 也就是原来没有关联性的数据现在变得有关联性了 也就是这样原来 a 其...
C语言学习笔记之结构体与共用体
结构体结构体:将不同类型的数据组合成一个有机的整体,以便引用;结构体中的元素也可以为结构体类型的for exmple :num     name        sex        age        score        addr10010    LiFei        M            18        87.5            Beijing声明一个结构体变量的形式 ...
数据结构-C语言结构体的使用
结构体解释:在使用C语言的时候,往往基本数据类型不能满足我们的需要,所以结构体这个概念也应运而生。结构体能够组合几种不同的基本数据类或其它数据类型形成一个新的数据类型。类似于面对对象中的类。    声明        关键字:struct        形式:struct node { int one; char two; }; //;作为结构体的一部分 不能省去    定义...
C语言结构体中冒号(位域)用法
位域出现的原因是由于某些信息的存储表示只需要几个bit位就可以表示而不需要一个完整的字节,同时也是为了节省存储空间和方便处理。   typedef struct  bit_struct {     int  bit1:3;     int  bit2:5;     int  bit3:7; }data;   bit1、bit2、bit3表示对应的位域 整个位域结构体占用2个...
C语言 数据处理
在不使用scanf函数如何对输入的数进行逆序输出呢?首先要得到该数的位数,因为需要在顺序输出里使用。代码如下:int Getfigure(int n) { int tmp=0; //计算循环次数 while(n != 0) { n /= 10; tmp++; } return tmp; //该数的位数 }其次要清楚该处理什么样特点的数,对这个数的个位进行...
中阶C语言 结构体(typedef用法、多维结构体、指针、内嵌函数)
111
深入理解C语言结构体成员变量内存分配
欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:&quot;算法与编程之美&quot;,欢迎关注,及时了解更多此系列博客。1 问题描述在学习C语言的时候,我们都会频繁的接触到结构体,使用结构体定义新的数据类型,从而更加方便的存储数据。但是在使用结构体的时候,有些问题会经常会困扰我们,如下所示:第一种结构体定义:struct school{    char address[100];    char nam...
C语言面试题---结构体
原创2017-12-26创新教育研究中心TeachPlus C语言面试题---结构体 请看下面这道题: 有程序: # include struct a{ double a; char b; int c; }A; int main() { int size = sizeof(A); printf("%d\n",size); r
C语言 使用内置快排函数——qsort(),以及结构体两元素的话
【 #很容易忘记怎么写# 系列】 #include&amp;lt;stdlib.h&amp;gt; 是在这个头文件中的函数! #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; int cmp(const void *a,const void *b) { return ( *(int *)a - *(int *)b ) ; } int main() {...
c语言结构体自引用和互引用原理及示例程序
结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针。         结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。 1. 自引用 结构体 1.1 不使用typedef时 错误的方式: [cpp] view plaincopyprint?
简单的C语言结构体实现面向对象的方法
一种简单方法,C语言实现面向对象类的方法。
c语言基础语法六——结构体(完结)
1;关于c语言结构体的引入; 在前面已经介绍了整形(int,long,….),浮点型(flaot,double),字符型(char),还介绍了数组(存储一组具有相同类型的数据),字符串。但是在实际问题中只有这些数据类型是不够的,有时候我们需要其中的几种一起来修饰某个变量,例如一个学生的信息就需要学号(字符串),姓名(字符串),年龄(整形)等等,这些数据类型都不同但是他们又是表示一个整体,要存在联系
C语言结构体方法的定义
一、简单介绍一般来说我们如果要在函数中去创建一个结构体的话,返回值一般都是返回一个指针,因为如果我们返回的是一个结构体的话,会消耗内存,因为在函数里面的内部创建的结构体,然后外面声明一个变量赋值给它,其实是做了一个拷贝操作,这样的话如果结构体有很多属性,就会消耗很多的内存,所以我们一般是把指向结构体的指针传递出去。下面都是在栈区开辟的空间,所创建的变量。所以是会存在问题的,因为是在子函数栈里面创建...
c语言对结构体的读取与写入
#include #define SAVE_PATH "./student.data" typedef struct student { char name[10]; int id; char addr[20]; }student; void write_msg(const student* s,int len) { #define _BIN_WR FILE* fp;
C语言结构体声明
这两个声明有什么不同?  struct x1{};  typedef struct {}x2;  第一种形式声明了一个“结构标签”;第二种声明了一个“类型定义”。主要的区别在于第二种声明更显抽象一些---用户不必知道他是一个结构,且声明他的实例时也不需要使用关键字typedef  x2 b;  但是使用标签的结构就必须用这样的形式进行定义。  struct x1 a;  同时也可以使
关于C语言结构体偏移的一点思考
前言 相信大家在c语言程序开发的过程一定都使用过结构体,那么不知你对结构体中成员变量偏移这块是如何理解的?本文将和大家一起分享下,本人最近关于c语言中结构体偏移的一些思考和总结。 另外这篇博文还可以帮你更好的理解这个问题c语言中两种宏定义的区别,关于这个思考有哪些方面的意义,细心的你可能发现本文所属的类别为linux内核设计与实现,而并非 GNU C语言编程,可能有些同学会有些许好
C语言-结构体-创建结构体 程序运行出错问题以及结构体创建和使用问题整理
运行结构体程序时,在创建新的结构体时,程序运行时总是出错,原因: 从而对C语言指针和结构体有了新的认识 PQueue CreateQueue(void) { PQueue Q; Q = (PQueue)malloc(sizeof(Queue));//2 Q-&amp;amp;gt;front = Q-&amp;amp;gt;rear = 0; return Q; } main() { ...
c语言结构体与文件
详细的讲解了c语言的机构体,文件的相关内容,言简意赅。是PPT形式的。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python数据处理 云计算数据处理