源代码为:
// 冒泡排序.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#define COUNT 6 //定义常量
int _tmain(int argc, _TCHAR* argv[])
{
int score[COUNT]={0};
int i=0;
int k=0;
int c=0;
for(i=0;i<COUNT;i++)
{
do{
printf("当前输入第%d成绩",i);
c=scanf("%d",&score[i]); //判断输入的值是否合法
fflush(stdin); //清除缓存
//或者为rewind(stdin);
}while(0==c);
}
for(i=0;i<COUNT;i++)
{
printf("score[%d]=%d/n",i,score[i]);
}
printf("/n-----------------------------/n");
for(i=0;i<COUNT-1;i++)
{
for(k=0;k<COUNT-1-i;k++)
{
if(score[k]<score[k+1])
{
int temp=0;
temp=score[k];
score[k]=score[k+1];
score[k+1]=temp;
}
}
}
for(i=0;i<COUNT;i++)
{
printf("score[%d]=%d/n",i,score[i]);
}
system("pause");
return 0;
}
注意点:
1、 最好要定义常量(在修改数值时只需要修改一处即可)
2、 核心代码中比较数值的大小要注意每次比较的i次后的数值不用在比较。
3、 奇怪的问题:
1. 在验证输入的是否是数字时do一定要包含printf而且参数也要有内容不能为空。
2. 此问题的解答为:
i. 只是没有提示用户printf信息,知道用户输入的是合法的数值才进行下一项。
ii. 如果提示printf信息,我们可以很清楚的看到。
4、 rewind(stdin)与fflush(stdin)的区别。
a) 一般的应用效果是一样的。
b) Rewind(stdin)是把指针指向头文件,相当于清空了缓存。
c) Fflush(stdin)是直接清空缓存的。
5、 &符号位置的放置。
a) 指针位置判断得出 如果加&则可认为是指针指向一个数值,如果前面是%s,这里则不用加&。
b) 如果是%c也要加& 也表示为一个指针。