#include<stdio.h> void maopao(int a[],int size) { int i,j,t; for(i = 0;i < size-1;i++) { for(j = 0;j < size-1-i;j++) { if(a[j] > a[j+1]) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } } int main(void) { int arr[1000]; int length = 0; int i=0; for(i=0;getchar()!='\n';i++) { scanf("%d",&arr[i]); if(i>=0&&i<=1000) { length++; } } maopao(arr,length); for(i = 0;i < length;i++) printf("%d ",arr[i]); printf("\n"); return 0; }为什么输出比输入少一个数
时间: 2024-04-11 07:29:11 浏览: 109
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
在你的代码中,当你使用`getchar()`读取输入时,你在循环条件中使用了`getchar() != '\n'`,这意味着只有当输入到达换行符时循环才会结束。而在你的代码中,你使用了`scanf("%d", &arr[i])`来读取整数。这样做的结果是,当你输入一个整数后,还需要输入一个换行符才会结束循环。因此,你的循环可能会继续读取到下一行的整数,这就导致了输出比输入少一个数。
为了解决这个问题,你可以修改循环条件,使用`scanf`函数返回的结果来判断是否成功读取了一个整数。修改后的代码如下:
```c
int main(void)
{
int arr[1000];
int length = 0;
int i;
for (i = 0; i < 1000; i++)
{
if (scanf("%d", &arr[i]) == 1)
{
length++;
}
else
{
break;
}
}
maopao(arr, length);
for (i = 0; i < length; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
这样修改后的代码将会在成功读取一个整数后增加`length`的值,并且当`scanf`函数返回值不等于1时跳出循环。这样就可以保证输出与输入的数量一致了。
阅读全文