用getchar输入二维数组

前言

作为一个彩笔新手,被getchar()恶心了一个下午,终于在群友提醒下,有了想法。其实用gets()或者scanf("%s")都会更容易一些,但我还是想试试用getchar()。

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int i=1,j=0,n;
    char a[21][21],ch;
	scanf("%d",&n);
	getchar();//吃一个回车

    for(i=1;i<=n;i++)
	{		
		
		while((ch=getchar())!=
)
		{
			//用ch避免数组吃回车
			a[i][j]=ch;
			j++;
		}
		a[i][j]=;//数组末尾补0	
		j=0;
		
	}
	for(i=1;i<=n;i++){
		puts(a[i]);//从a[1][0]开始打印第1行,遇到结束
	}
    return 0;
}

用上面思路可以搞定下面这题

2048:【例5.18】串排序

【题目描述】

对给定的n(1≤n≤20)个国家名(国家名字长度不超过20),按其字母的顺序输出。

【输入】

第一行为国家的个数n以下n行为国家的名字。

【输出】

n行,排序后的国名。

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int i=1,j=0,k=1,n;
    char a[21][21],ch,t[21];
	scanf("%d",&n);
	getchar();
	    for(i=1;i<=n;i++)
	{		
		
		while((ch=getchar())!=
)
		{
			//用ch避免数组吃回车
			a[i][j]=ch;
			j++;
		}
		a[i][j]=;//数组末尾补0	
		j=0;
		
	}
	//冒泡排序比较
	for(i=1;i<n;i++)
	{
		for(j=1;j<n+1-i;j++)
		{
			if(strcmp(a[j],a[j+1])>0)
			{
				strcpy(t,a[j]);
				strcpy(a[j],a[j+1]);
				strcpy(a[j+1],t);
			}
		}
	}
	//输出结果
	for(i=1;i<=n;i++){
		puts(a[i]);
	}
    return 0;
}

在结构体读取时的使用

要求输入姓名,成绩(空格分隔)并读取到student类,连续输入两个空格则停止读入,输出结果。

#include<stdio.h>
#include<stdlib.h>
struct student {
    char name[20];
    int score;
    int rank;
};
int main(){
	int i=0,j;
	struct student a[10];
	char ch;
	int hnum=0;
	while(i<10){
		int w=0;//每行第几字符 
		while((ch=getchar())!= ){
			if(ch==
){
				hnum+=1;
			}else{
				hnum=0;//不是连续的两个
就清零 	
			}
			if(hnum==2){
				break;
			}else if(hnum==1){
				continue;//防止数组存入

			}		
			a[i].name[w]=ch;
			w++;
		}
		a[i].name[w]=;//数组末尾补0		
		if(hnum==2){
			break;
		}	
		scanf("%d",&a[i].score);
		a[i].rank=0;//冒泡排序或者qsort这里就不写了
		i++;
	}
	for(j=0;j<i;j++){
		printf("%s %d
",a[j].name,a[j].score);
	}
	return 0;
}
经验分享 程序员 微信小程序 职场和发展