用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; }