Linux中处理循环中scanf引起的缓冲区清除问题

fflush(stdin)在gcc里不能够清空缓冲区,为了解决这个问题可以用getchar()处理这个问题,如下面代码所示:

#include <stdio.h>
#define N 10
struct student
{
    long num;
    char name[20], sex;
    int age, score;
};

void main()
{
    int s,t=-1;
    long xuehao;
    struct student stu[N];
    printf("Please input %d students‘ information as follows: \n",N);
    printf("Num Name Sex Age Score.\n");
    for(s=0;s<N;s++)
    {
        printf("Please input %dth students‘ information:\n", s+1);
        scanf("%ld%s%c%d%d", &stu[s].num,stu[s].name,&stu[s].sex,&stu[s].age,&stu[s].score);
        while(( getchar())!=‘\n‘);
    }

    printf("Please input the searched students num: \n");

    scanf("%ld", &xuehao); 

    for(s=0;s<N;s++)
    {
        if(xuehao==stu[s].num)
        {
            t =s;
            break;
        }
    }
    if(t!=-1)
    {
        printf("%ld %s %c %d %d\n", stu[t].num,stu[t].name,stu[t].sex,stu[t].age,stu[t].score);

    }
    else
        printf("The searched student is not existent!") ;
}

如果没有这一行,结果如下:

Please input 10 students‘ information as follows:
Num Name Sex Age Score.
Please input 1th students‘ information:
1 wei f 1 1
Please input 2th students‘ information:
Please input 3th students‘ information:
Please input 4th students‘ information:
Please input 5th students‘ information:
Please input 6th students‘ information:
Please input 7th students‘ information:
Please input 8th students‘ information:
Please input 9th students‘ information:
Please input 10th students‘ information:
Please input the searched students num: 

加上这一行后输入如下:

Please input 10 students‘ information as follows:
Num Name Sex Age Score.
Please input 1th students‘ information:
12 wei f 11 13
Please input 2th students‘ information:
11 weiwei f 111 34
...
时间: 2024-10-17 02:29:45

Linux中处理循环中scanf引起的缓冲区清除问题的相关文章

Linux gcc for 循环中 i=i++ 会造成死循环问题及 ++i / i++ 汇编分析

在把 Windows 程序移植到 Linux 时遇到了死循环,最后定位到了类似这种的语句 for (i = 0; i < 1; i = i++), 别问我是谁写的,为什么这么写(泪目!). 根据C语言的常识, i = i++ 应该等价于 i++, Windows 上确实是这样,但 Linux 不是,这应该是编译器差异造成的. --------------------------------------- 可 i 的分割线 No.0 --------------------------------

23 24 25 py中break和continue 循环中的else语句 exec和eval函数

第十课 跳出循环(break和continue) break :退出整个循环 不执行循环下面的其他语句 continue:忽略continue后面的所有的语句 然后会转向执行下一次的循环 也就是会执行下面的语句的 # coding:utf-8 x = 0 while x < 12: print(x,end = ',') x +=1 # 结果Wie : 0,1,2,3,4,5,6,7,8,9,10,11, print() y = 0 while y < 12: if y == 5: break;

linux中fork()函数详解[zz]

转载自:http://www.cnblogs.com/york-hust/archive/2012/11/23/2784534.html 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有

linux中fork()函数详解【转】

转自:http://blog.csdn.net/jason314/article/details/5640969 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事.    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程

Linux中fork的秘密

linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事.     一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. 我们来看一个例子: [cpp] view p

linux中fork()函数具体解释(原创!!实例解说)

 一.fork入门知识 一个进程,包含代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程差点儿全然同样的进程,也就是两个进程能够做全然同样的事,但假设初始參数或者传入的变量不同,两个进程也能够做不同的事.    一个进程调用fork()函数后,系统先给新的进程分配资源,比如存储数据和代码的空间.然后把原来的进程的全部值都拷贝到新的新进程中,仅仅有少数值与原来的进程的值不同.相当于克隆了一个自己. 我们来看一个样例: /* * fork_test.c * version

(转)linux中fork()函数详解

一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事.    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. 我们来看一个例子: [cpp] view plaincopy /* *  for

linux中fork()函数详解

 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事.    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. 我们来看一个例子: [cpp] view plain copy /* *  f

linux中fork()函数详解(原创!!实例讲解) (转载)

 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都 复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. 我们来看一个例子: /* * fork_test.c * version 1 *