bokuwa 懒狗 des
OJ经常碰到要输入一整行的数字,又没有结束符,又没有长度,用getchar不能读取一位以上的数,用getchar判断换行符还会出现秀才读字读半边的状况,应该怎么解决呢?
例:ZGSOJ 1844 数组操作【数组】
描述
在数组A[1..n]中有n个数据,试建立一个带有头结点的循环链表,头指针为h,要求链中数据从小到大排列,重复的数据在链中只保存一个。
输入样例
21 32 43 12 34 34 23 12 22
输出样例
12 21 22 23 32 34 43
数据IO示例:
//这里给出的方法是用scanf("%d%c")读取一组数据及紧跟其后的分隔符
//用这个去判断就不会出现赛博断头台的情况
#include <stdio.h>
#include <stdlib.h>
void print(int a[]) //打印整型数组并换行
{int n=0; while(a[n]!=0) n++; for(int i=0; i<n; i++) printf("%d ",a[i]); putchar('\n');}
int main() {int a[100],len=0,i=0; char c;
while(1) {
scanf("%d%c",&a[len],&c); len++;
if(c=='\n') break;}
print(a);}
//IN: 12 34 56
//OUT:12 34 56
例题参考解答:
//1844 数组操作
//21 32 43 12 34 34 23 12 22
#include <stdio.h>
#include <stdlib.h>
void sortUni(int c[]){int i,j,k,t; int n=0; while(c[n]!=0) n++;
for(i=0;i<n-1;i++) for(j=0;j<n-i-1;j++) //Bubble Sort
if(c[j]>c[j+1]) {t=c[j]; c[j]=c[j+1]; c[j+1]=t; }
for(i=0; c[i]; i++) for(j=i+1; c[j];) //Unique
{if(c[i]==c[j]) for(k=j; c[k]; k++) c[k] = c[k+1]; else j++;} }
int main() {int a[100],len=0,i=0; char c;
while(1) {//以换行符为输入结束标志
scanf("%d%c",&a[len],&c); len++;
if(c=='\n') break;}
sortUni(a); len=0; while(a[len]!=0) len++;
for(i=0; i<len-1; i++) printf("%d ",a[i]);
printf("%d\n",a[len-1]);}
//不知道哪里测试数据不对 (⇀‸↼‶)