结构变量输入不正确的顺序可能会导致不正确的操作结果

写一个程序,需求:由...制作3单向动态列表学生数据节点配置,输入学生数据向每个节点

(每个学生的数据包含学号、全名、成就)。每个节点然后逐个输出数据。

正确的程序,如下面的:

#include<stdio.h>

#include<malloc.h>

#define LEN sizeof(struct student)

struct student

{

int num;

char name[20];

float score;

struct student *next;

} ;

void main()

{

struct student *head,*p,*q;

head=p=(struct student*) malloc(LEN);

scanf("%d,%f,%s",&p->num,&p->score,p->name);

p=(struct student*) malloc(LEN);

scanf("%d,%f,%s",&p->num,&p->score,p->name);

q=(struct student*) malloc(LEN);

scanf("%d,%f,%s",&q->num,&q->score,q->name);

head->next=p;

p->next=q;

q->next=NULL;

p=head;

printf("\n结点 1:%d,%5.1f,%s",p->num,p->score,p->name);

p=p->next;

printf("\n结点 2:%d,%5.1f,%s",p->num,p->score,p->name);

q=p->next;

printf("\n结点 3:%d,%5.1f,%s\n",q->num,q->score,q->name);

}

执行结果为:

输入:

10101,98,li

10102,87,wang

10103,76,qi

输出:

结点 1:10101, 98.0,li

结点 2:10102, 87.0,wang

结点 3:10103, 76.0,qi

错误的程序例如以下:

#include<stdio.h>

#include<malloc.h>

#define LEN sizeof(struct student)

struct student

{

int num;

char name[2];

float score;

struct student *next;

} ;

void main()

{

struct student *head,*p,*q;

head=p=(struct student*) malloc(LEN);

scanf("%d,%s,%f",&p->num,p->name,&p->score);

p=(struct student*) malloc(LEN);

scanf("%d,%s,%f",&p->num,p->name,&p->score);

q=(struct student*) malloc(LEN);

scanf("%d,%s,%f",&q->num,q->name,&p->score);

head->next=p;

p->next=q;

q->next=NULL;

p=head;

printf("\n结点 1:%d,%5.1f,%s",p->num,p->score,p->name);

p=p->next;

printf("\n结点 2:%d,%5.1f,%s",p->num,p->score,p->name);

q=p->next;

printf("\n结点 3:%d,%5.1f,%s\n",q->num,q->score,q->name);

}

执行结果为:

输入:

10101,wang,,98

10102,wani,,87

10103,wangx,,76

输出:

结点 1:10101,  0.0,wang,,98 p?

结点 2:10102,  0.0,wani,,878p?

结点 3:10103,  0.0,wangx,,7

想要得到的结果应该为:

结点 1:10101,  98.0,wang,

结点 2:10102,  87.0,wani,

结点 3:10103,  76.0,wangx,

假设将想要输入的字符串数组放在输入的中间,就极有可能导致

在输入完字符串之后,还会将接下来输入的内容输入到字符串中,

会导致输出值发生混乱,得不到想要的结果,因而,最好将字符串

输入參数放在參数列表的最后,这样它有可能避免输出错误。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-10-08 19:52:12

结构变量输入不正确的顺序可能会导致不正确的操作结果的相关文章

结构体中变量输入顺序不对会导致执行结果不对

写了一个程序,需求是:建立由3个学生数据结点构成的单向动态链表,向每个结点输入学生的数据 (每个学生的数据包括学号.姓名.成绩),然后逐个输出各结点中的数据. 正确的程序如下: #include<stdio.h> #include<malloc.h> #define LEN sizeof(struct student) struct student { int num; char name[20]; float score; struct student *next; } ; vo

C++结构变量数据对齐问题

为了避免混淆.做例如以下规定,下面代码若不加特殊说明都执行于32位平台,结构体的默认对齐值是8,各数据类型所占字节数分别为 char占一个字节 int占四个字节 double占八个字节. 两个样例 请问以下的结构体大小是多少? struct Test { char c ; int i ; }; 这个呢? struct Test1 { int i ; double d ; char c ; }; 在发布答案之前先看一下对齐的规则. 对齐规则 一般来说,结构体的对齐规则是先按数据类型自身进行对齐,然

Java构造方法、成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的?

[Java笔试真题]:构造方法.成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的? [解答]:当类第一次被加载的时候,静态变量会首先初始化,接着编译器会把实例变量初始化为默认值,然后执行构造方法. Java程序的初始化一般遵循以下三个原则(以下三原则优先级依次递减): ① 静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次: ② 父类优先于子类进行初始化: ③ 按照成员变量定义顺序进行初始化,即使变量定义散布于方法

输入n,按顺序打印1到最大的n位十进制数

1 /* 2 *题目要求:输入n,按顺序打印1到最大的n位十进制数 3 *比如:输入3,则打印1,2,...999 4 *更新日期:2015-06-15 5 */ 6 7 //注意题目中的陷阱,当n稍微大一点的时候会溢出,所以使用字符串输出的策略 8 9 #include<iostream> 10 using namespace std; 11 12 void 13 Print_number_byte(unsigned char num) 14 { 15 if(num<1)return

关于指针 用字符数组,字符指针变量输入字符串 动态为字符型指针变量分配内存

#include <stdio.h> #include <iostream> #include<math.h> using namespace std; int main() { //声明字符型数组和指针变量 char str[10]; char *strip=str; //输入输出 cout<<"str="; cin>>str; //用字符数组输入字符串 cout<<"str="<<

C++成员变量、构造函数的初始化顺序 [转]

C++成员变量.构造函数的初始化顺序 一.C++成员变量初始化 1.普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行 2.static 静态变量(本地化数据和代码范围): static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个.在这种性质上理解,有点类似于全局变量的唯一性. 函数体内static变量的作用范围时该函数体,不同于auto变量,该变量内存只被分配一次,因此其值在下次调用时维持上次的值

谈一谈a:link、a:visited、a:hover、a:active的正确使用顺序

前端路上,未来还远,所以基础部分必须扎实,走好现在脚下的每一步才是现在最重要的. 下面进入正题吧. 1. <a>标签 我们先说一说<a>标签是干啥用的. <a> 标签定义超链接,用于从一张页面链接到另一张页面. <a> 元素最重要的属性是 href 属性,它指示链接的目标. 在所有浏览器中,链接的默认外观是: 未被访问的链接带有下划线而且是蓝色的 已被访问的链接带有下划线而且是紫色的 活动链接带有下划线而且是红色的 <a>标签还有一个很重要的属性

android中canvas的clipRect和concate调用顺序不同导致的图像效果不同。

这几天一直弄关于Canvas方法调用顺序不同导致效果不一样的測试. 至于原理,我的canvas和Matrix之间的关系能够看到原因.还是就是每一个人要多去尝试,才干真正理解透彻. 接下来我解说一下第一张图五个标签的意义: 第一顺序图片是正常全屏显示在800*1280的手机上的.没有任务效果.只是原图是720*1280,所以为了满足手机的屏幕大小,他进行了等倍数的放大. 第二顺序图效果是进行PolyToPoly之后的图片,没有进行区域剪切. 第三顺序图是先剪切显示区域,然后PolyToPoly以后

Java编程练习之判断Java文件名是否正确,判断邮箱格式是否正确和统计指定字符串中某字符现的次数

一判断Java文件名是否正确,判断邮箱格式是否正确 功能:判断Java文件名是否正确,判断邮箱格式是否正确.其中:合法的文件名应该以.java结尾:合法的邮箱名 中至少要包含 "@" , 并要求 "@" 在 "." 之前. 练习代码: public class Test { public static void main(String[] args) { //Java文件名 String fileName = "HelloWorld.j