2 yangzfop yangzfop 于 2014.09.17 13:19 提问

C语言的递归输出,会输出重复的打印信息,不知道是不是跟输出流缓冲有关

我写的单向链表创建和遍历打印的函数输出一些信息,不知道是怎么来的,希望各位大神能给予指点。
代码:
#include
#include
#include
#include
typedef struct node{
char value;
struct node *m_next;
}inode;

void CreateNodeTree(inode **treenode)
{
char a;
printf("input char,q is null:\n");
a=getchar();
if (a=='q')
{
(*treenode)=NULL;
return ;
}
else
{
treenode=(inode)malloc(sizeof(inode));
(*treenode)->value=a;
(*treenode)->m_next=NULL;
}
CreateNodeTree(&((*treenode)->m_next));

}
void PrintNode(inode *head)
{
if (head!=NULL)
{
inode *treenode=head;
while(treenode)
{
printf("value:%c\n",treenode->value);

        treenode=treenode->m_next;
    }
}
if (head==NULL)
{
    printf("head is null\n");
}

}
void main()
{
inode *head=NULL;
CreateNodeTree(&head);
PrintNode(head);

}

我输入三个节点的值a,b,c。然后进行打印
input char,q is null:
a
input char,q is null:
input char,q is null:
b
input char,q is null:
input char,q is null:
c
input char,q is null:
input char,q is null:
q
value:a
value:

value:b
value:

value:c
value:

请按任意键继续. . .

中间重复输出的信息和空的一行是怎么产生的??

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
[Linux C语言](学习笔记)标准输入流输出流以及错误流的重定向机制(1)
main.c文件如下#include <stdio.h>int main() { printf("input the int value i:\n");//标准输出流,输出到显示器 int i, j; scanf("%d",&i);//标准输入流,由键盘输入 printf("input the int value j:\n"); scanf("%d", &j)
Java缓冲区之输入输出流
Java缓冲区之输入输出流 --模范青蛙   下面我想通过一个例子来简单介绍一下流在缓冲区是怎么被读写的。InputStream OutputStream Reader Writer都是抽象类,他们本身并没有实现多少方法,本身又为抽象类,我们无法创建他们的对象,只能使用多态来创建子类的对象。来实现具体的功能。 字符流的底层都是通过字节流来操作的,在这里只拿字节流的一个例子来分析一下
对C语言输入输出流和缓冲区的深入理解
导读:对C语言输入输出流和缓冲区的深入理解,C语言缓冲区(缓存)详解,缓冲区又称为缓存,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区,为什么要引入缓冲区,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲
java 输入流,输出流和缓冲区的个人学习感悟
java 输入流,输出流和缓冲区的个人见解
Java带缓冲的输出流和不带缓冲的输出流对比
在写文件的时候,大家可能都不会考虑到性能的问题,只要实现了性能就可以了,实际上带缓冲的输出流在性能上更佳!!! 如下例子:   import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.Writer; /** * @编写人: yh.zeng * @编写时间
[Linux C语言](学习笔记)标准输入流输出流以及错误流
stdin 标准输入流,标准的输入设备默认键盘stdout 标准输出流,标准的输出设备默认屏幕stderr 标准错误流,只有程序出错时才会执行的流程printf(“abc”) 是对fprintf(stdout,”abc”)函数的封装.把“ ”内的内容写入到stdout文件里去,stdout其实就是默认显示器(屏幕)scanf(“%d”,&a) 是对fscanf(stdin,”%d”,&a)函数的封装
std::cerr是ISO C++标准错误输出流
概念编辑 std::cerr是ISO C++标准错误输出流,对应于ISO C标准库的stderr。 与std::cout不同,ISO C++要求当cerr被初始化后,cerr.flags() & unitbuf非零(保证流在每次输出操作后被刷新),且cerr.tie()返回&cout。[1] 即cerr默认和cout同步但无缓冲。 2cerr与cout的区别编辑 c
c语言输入流和输出流的控制(小技巧)
#include int main() { double a=0.123456789; int a0,a1,a2,a3,a4,a5; int _int=1; scanf("%1d%1d%1d%1d%1d%1d",&a0,&a1,&a2,&a3,&a4,&a5); /* 输入流拆分,输入6位数,1每次读取一位,2两位 */ pri
C语言简单递归实现字符串逆序输出
题目内容的 “注意” 已经侧面规定了要用递归来实现: 输入是一个可能含有空格的串说明要用gets来读入字符串,如果利用scanf的话是无法读入一段含有空格的串。
Java精选笔记_IO流(字节流、InputStream、OutputStream、字节文件、缓冲区输入输出流)
字节流 操作图片数据就要用到字节流。 字符流使用的是字符数组char[],字节流使用的是字节数组byte[]。 字节流读写文件 针对文件的读写,JDK专门提供了两个类,分别是FileInputStream和FileOutputStream。 FileInputStream是InputStream的子类,它是操作文件的字节输入流,专门用于读取文件中的数据 FileOutput