用getchar输入二维数组

前言

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

#include
#include
#include
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())!='\n')
		{
			//用ch避免数组吃回车
			a[i][j]=ch;
			j++;
		}
		a[i][j]='\0';//数组末尾补0	
		j=0;
		
	}
	for(i=1;i<=n;i++){
		puts(a[i]);//从a[1][0]开始打印第1行,遇到\0结束
	}
    return 0;
}

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

2048:【例5.18】串排序

【题目描述】

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

【输入】

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

【输出】

n行,排序后的国名。

#include
#include
#include
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())!='\n')
		{
			//用ch避免数组吃回车
			a[i][j]=ch;
			j++;
		}
		a[i][j]='\0';//数组末尾补0	
		j=0;
		
	}
	//冒泡排序比较
	for(i=1;i0)
			{
				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;
}

在结构体读取时的使用

用getchar输入二维数组_第1张图片

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

#include
#include
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=='\n'){
				hnum+=1;
			}else{
				hnum=0;//不是连续的两个\n就清零 	
			}
			if(hnum==2){
				break;
			}else if(hnum==1){
				continue;//防止数组存入\n
			}		
			a[i].name[w]=ch;
			w++;
		}
		a[i].name[w]='\0';//数组末尾补0		
		if(hnum==2){
			break;
		}	
		scanf("%d",&a[i].score);
		a[i].rank=0;//冒泡排序或者qsort这里就不写了
		i++;
	}
	for(j=0;j

你可能感兴趣的:(C语言学习,c语言)