当前位置:编程学习 > C/C++ >>

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语言到第五章还是不会自己写简单的程序!!怎么办??

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,