C语言问题
题目:用字符数组存储任意10个字符,求该10个字符中最大字符。
#include<stdio.h>
#define N 10
void main()
{
int k;
char a[N],m=0;
printf("请输入10个字符:\n");
for(k=0;k<10;k++)
{
scanf("%c",&a[k]);
printf("k=%d\n",k);
if(a[k]>m)
m=a[k];
}
printf("最大字符为:%c\n",m);
}
我一直很困惑为什么我编的这个程序只能输入5个字符,后来再加一个语句printf("k=%d\n",k);结果更让我困惑了,大家看看插图吧。我实在是不明白为什么每输入一个字符它会出现两个k
追问:我再弱弱地问下:
“最新c标准要是Main函数要返回int类型的”
这句我不太懂,而且如果全都改成%d,就只能输入整数啊,像字母之类的字符怎么输入啊?
for(k=0;k<10;k++)
{
scanf( "%c",&a[k] );
printf("k=%d\n",k);
if(a[k]>m)
m=a[k];
fflush( stdin ); //flush stdin
}
你写的这个代码好像跟我的一样啊?能不能再赐教一下,你说的第二种方法具体是什么。
我决定采纳你的答案了谢谢啊,你的c语言好厉害啊,不过楼下的总结得更完整,我只能采纳一个答案,不好意思啊。感谢你的帮助只是改成整形之后,就没办法输入除整数之外的字符了
答案:scanf("%c",&a[k]);//这里缓冲区读取一个字符而在你输入的时候你是输入一个数字字符'1'和一个回车符'\n',因此当你用scanf取走一个字符后缓冲区里面还有一个回车符。在你第二次用scanf读取的时候就没有等待键盘输入,而直接从缓冲区里面读取剩下的回车符,所以你的屏幕一下就打印出两个K,以此类推。这里给出的一个解决方法是用getchar()函数来吃掉多余的回车符,或者在每次for循环的最后将输入缓冲区刷新一下。还有一种方法是scanf("%d",&a[k]);,修改成格式化格式为整型的,那么在第二次读取的时候,scanf函数会跳过回车符'\n',然后读取下面一个你输入的整数。在有一种方法是scanf("%c\n",&a[k]);楼主要是把上面理解了,估计理解这个也不难。第一种方法,楼上已经写了,我重点写下用字符表示第二种方法。
for(k=0;k<10;k++)
{
scanf( "%c",&a[k] );
printf("k=%d\n",k);
if(a[k]>m)
m=a[k];
fflush( stdin ); //flush stdin
}
还有就是你写的代码很不规范,最新c标准要是Main函数要返回int类型的。并且因为你要判断整型数据,所以在输入的时候最好将格式写为%d类型的,修改成%d类型的,也不会出现你上面的问题。
其他:for(k=0;k<10;k++)
{
scanf("%c",&a[k]);
getchar();//加个这个试试 可能是因为回车也算字符了
printf("k=%d\n",k);
if(a[k]>m)
m=a[k];
} 给你一个程序作为参考,求某一天是这一年的第几天
只要把当前日期是第几天,生日是第几天求出来。
那么减一下,就是离生日还有多少天。
至于几岁,就是直接比较当前日期和出生日期,就可以了。
#include <stdio.h>
int main()
{
int month[13] = { 0, 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31 };
int y, m, d;
int i, day;
int special_year;
scanf("%d%d%d", &y, &m, &d);
if(y % 400 == 0 || y % 100 != 0 && y % 4 == 0) {
month[2] = 29;
}
if(m >= 1 && m <= 12 && d >= 1 && d <= month[m]) {
day = d;
for(i = 1; i < m; ++i) {
day += month[i];
}
printf("%d\n", day);
}
else {
printf("data error");
}
return 1;
}
你的字符型和整型有点乱,既然你全是整型输入,就用整型定义好了。
修改后的:
#include<stdio.h>
#define N 10
void main()
{
int k;
int a[N],m=0;
printf("请输入10个字符:\n");
for(k=0;k<10;k++)
{
scanf("%d",&a[k]);
printf("k=%d\n",k);
if(a[k]>m)
m=a[k];
}
printf("最大字符为:%d\n",m);
}
上一个:C语言同时输入字符串和数字
下一个:学C语言到第五章还是不会自己写简单的程序!!怎么办??