如图所示,当分次往程序中输入学生信息后再输出,两次输入的信息输出信息之间会有一个意义不明的“0 0.00”
纯新人,先前只学过一点c/c++和python,想学着在c中那样在go中利用链表的形式创建一个学生管理系统,结果只到输出环节就翻车了
以下是关于输入/输出的相关代码:
package main
import(
"fmt"
"os"
)
func Add(head *student) *student{ //输入学生信息
var(
p *student = nil
pr *student = nil
num string
Name string
Sex byte
Age int
Score float64
)
fmt.Println("开始录入学生信息:")
fmt.Println("请按照学号、姓名、性别、年龄、成绩的顺序录入:")
for true{
p = new(student) //申请内存
if p == nil{
fmt.Println("不够内存!")
os.Exit(1)
}
if head == nil{
head = p //若 头指针 为 空,则头指针指向 新申请内存空间p
}else{
pr = head
for pr.next != nil{
pr = pr.next
}
pr.next = p
}
fmt.Scan(&num)
if num == "-1"{
fmt.Println("录入结束!")
p = nil
break
}
fmt.Scanf("%s %c %d %f",&Name,&Sex,&Age,&Score)
p.number = num
p.name = Name
p.sex = Sex
p.age = Age
p.score = Score
p.next = nil
People ++
}
fmt.Println("录入成功!")
return head //返回
}
package main
import (
"fmt"
)
func Print_(head *student){ //输出学生信息
if head == nil{
fmt.Println("你的学生信息表单为空!")
return
}
var pr = head
for pr.next != nil{
fmt.Printf("%s %s %c %d %.2f\n",pr.number,
pr.name,pr.sex,pr.age,pr.score)
pr = pr.next
}
}
求大神援助(😭
> 两次输入的信息输出信息之间会有一个意义不明的“0 0.00”
请问是哪一条语句输出的呢?
fmt.Printf("%s %s %c %d %.2f\n",pr.number, pr.name,pr.sex,pr.age,pr.score)
这两段代码里只有这句有格式化输出,0.00应该是从%f那里来的
问题已经解决了,虽然至今不知道这个问题出现的原理,但是已经找到了解决途径
只要在输出处添加一个判断年龄是否是零的条件语句就能完美解决问题了
当然,还是希望有大神能讲解下这个问题是怎么出现的
for pr.next != nil{
if pr.age != 0 {
fmt.Printf("%s %s %c %d %.2f\n",pr.number,
pr.name,pr.sex,pr.age,pr.score)
}