C语言 输入输出及懒狗模板

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]);}
//不知道哪里测试数据不对 (⇀‸↼‶)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值