读取一起整数串进行然后排序,为什么这样写有时可以读取一行就截止,有时能够读到两行才截止呢

读取一行整数串进行然后排序,为什么这样写有时可以读取一行就截止,有时能够读到两行才截止呢?
本帖最后由 abclovem 于 2013-09-09 18:19:47 编辑
#include<stdio.h>

int *bubble_sort (int *a, int len);

int main()
{
char ch;
int a[100];
int len, i = 0;
while (scanf("%d", &a[i++]))//(1)
if ((ch = getchar()) == '\n')
break;
else
ungetc(ch, stdin);

len = i;
bubble_sort(a, len);
for (i = 0; i < len; i++)
printf("%d ", a[i]);
}
int *bubble_sort(int *a, int len)
{
int i, j;
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - i - 1; j++)
if (a[j] > a[j + 1])
a[j] ^= a[j + 1] ^= a[j] ^= a[j + 1];
}
return a;
}

读一串整数到数组,我想读到换行就停止读入数据,程序中用到了scanf结合while循环,可是程序运行时,有两种情况,有时读一行到换行就停止读入;第二种情况是有时候读到一行输入换行符,它不停止,我在下一行输入一个数再输入换行它才停止,输入相同的数据,也会出现这种情况,这是为什么呢?
-------刚才试了一下,相同数据后面加个空格再加换行会出现第二种情况。

------解决方案--------------------
初步判断,你没有严格按照格式来读取,比如输入数据1 2 3 4 7\n。执行过程为:
读入1,读取字符‘ ’,退还‘ ’缓存区结果是“ 2 3 4 7\n”,接着又是scanf("%d", &a[i++])。初步判断,没亲自试过,但是使用cin与cin.peek配合可实现你的功能,这个是亲测的。