楼主,我帮你看了一个,主要问题是关于C语言在scanf之后,还在输入字符的问题.
我先把改过的代码给出 :
#include <stdio.h>
int main(void)
{
int z[30], n, t, g, i, j, a, xia, max;
char ch;
scanf("%d", &t);
getchar();
for(g=1; g<=t; g++)
{
for(i=1; i<=28; i++)
z[i]=0;//记录数组初始化
for(i=1; i<=1000; i++)
{
ch=getchar();
if(ch=='\n')
break;
a=ch-'a'+1;
z[a]++;
}//统计到记录数组
max=-9;
for(i=1; i<=26; i++)
{
if(z[i]>max)
{max=z[i]; xia=i;}
}
ch='a'+xia-1;
printf("%c ", ch);
printf("%d\n", max);
}
return 0;
}
这是我自己学C 输入数字,字符、回车的笔记:
c语言中 scanf后面一定要跟个 getchar吃回车吗?
如果后面有个scanf或者getchar()读取字符型的话就会读到回车了(输入流缓冲区会保留回车)。fflush和getchar以及相关的一些函数可以吞掉后面的回车
#include
int main()
{
char a;
scanf("%c",&a);
printf("你输入了%c\n",a);
// fflush(stdin); 也可以用getchar()吞掉回车
scanf("%c",&a);
printf("你输入了%c\n",a);
return 0;
}
但是为什么把%c换成%d结果就不一样了?
%d 输入的时候,也是输入了数字+ 回车符
这时候就看你下一条 输入语句是什么了 如果也是 %d 那么没问题
如果下一条 是 %c那么就会读取到留在缓冲区里的 回车符号
可以百度 搜索“ C 输数字 字符 回车 ”,看一下第二篇文章
在scanf 之后 可以用 fflush(stdin) 清空缓冲区。
函数名: fflush
功 能: 清除一个流
用 法: int fflush(FILE *stream);
头文件
getch()、getche()和getchar()函数
(1) getch()和getche()函数
这两个函数都是从键盘上读入一个字符。其调用格式为:
getch();
getche();
两者的区别是: getch()函数不将读入的字符回显在显示屏幕上, 而getche()
函数却将读入的字符回显到显示屏幕上。
例1:
#include
#include //头文件
main()
{
char c, ch;
c=getch(); /*从键盘上读入一个字符不回显送给字符变量c*/
putchar(c); /*输出该字符*/
ch=getche(); /*从键盘上带回显的读入一个字符送给字符变量ch*/
putchar(ch);
}
利用回显和不回显的特点, 这两个函数经常用于交互输入的过程中完成暂停
等功能。
例2:
#include
main()
{
char c, s[20];
printf("Name:");
gets(s);
printf("Press any key to continue..."); //这样不会在打印出这句话后,立即输出Press any key to continue 而是等待你输入一个不回显的回车后,再输出最后一句话。
getch(); /*等待输入任一键*/
}
(2) getchar()函数
函数名: getchar
功 能: 从stdin流中读字符
用 法: int getchar(void);
头文件: #include
getchar()函数也是从键盘上读入一个字符, 并带回显。它与前面两个函数
的区别在于: getchar()函数等待输入直到按回车才结束, 回车前的所有输入字
符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。
#include
getchar()函数的调用格式为:
getchar();
例3:
#include
#include
main()
{
char c;
c=getchar(); /*从键盘读入字符直到回车结束*/
putchar(c); /*显示输入的第一个字符*/
getch(); /*等待按任一健*/
}
例4
#include
#include
main()
{
char c;
while ((c=getchar())!='\n') /*每个getchar()依次读入一个字符*/
printf("%c",c); /*按照原样输出*/
getch(); /*等待按任一健*/
}
getch()等待读取键盘输入的一个字符,不显示与屏幕上
getche()显示与屏幕上
我想,如果看了上面的笔记应该会帮助楼主。其实楼主的算法没有问题。但是我有一些建议给楼主,在取变量名的时候,最见名知义。
比如,用于统计的数组z[],可以用count[]代替,t可以用times(次数)代替。。 这样,往后自己回看,或者供给他人阅读,都很方便。希望对楼主有用