求一组字符串中ASCII码最大的字符 有问题啊

bolvdandan 2014-02-28 09:33:49

#include<stdio.h>
int main()
{
char c[11];
int a[10],len;
int i,j,max;
while(scanf("%s",c)!=EOF)
{
while(c[i]!='\0')
{
a[i]=c[i];
i++;
}
max=a[0];
len = strlen(c);
for(j=1;j<len;j++)
{
if(a[0]<a[j])
{
a[0]=a[j];
}
}
printf("%c",a[0]);
}
return 0;
}

输入后会报内存出错 为什么啊?
...全文
385 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
偷不得懒 2014-03-02
  • 打赏
  • 举报
回复
1 #include<stdio.h> 2 #include<string.h> 3 4 void main() 5 { 6 char c[11]; 7 char a[11]; 8 int len; 9 int i, j; 10 char max; 11 i = 0; 12 scanf("%s", c); 13 while(c[i]!='\0'){ 14 a[i]=c[i]; 15 i++; 16 } 17 max = a[0]; 18 len=strlen(c); 19 for(j=1; j<len; j++){ 20 if(a[0]<a[j]){ 21 a[0]=a[j]; 22 } 23 } 24 printf("%c\n", a[0]); 25 }
bolvdandan 2014-03-02
  • 打赏
  • 举报
回复
引用 6 楼 ForestDB 的回复:
一次不能输入超过10个字符。
恩 就是这个问题 不知道怎么控制一次输入小于等于10个字符啊
bolvdandan 2014-03-02
  • 打赏
  • 举报
回复
引用 8 楼 ZXvivian 的回复:
[quote=引用 7 楼 ZXvivian 的回复:] 声明时最好同时初始化,这里使用字符串操作时需要包含string.h头文件,代码如下
#include <stdio.h>
#include "string.h"
int main()
{
	char c[11]={0};
	int a[10]={0},len=0;
	int i=0,j=0,max=0;
	while(fgets(c,11,stdin)!=EOF)
	{
		while(c[i]!='\0')
		{
			a[i]=c[i];
			i++;
		}
		max=a[0];
		len=strlen(c);
		for(j=1;j<len;j++)
		{
			if(a[0]<a[j])
			{
				a[0]=a[j];
			}
		}
		printf("%c",a[0]);
	}
	return 0;
}
上面准备用红字体的。。点错了
#include <stdio.h>
#include "string.h"
int main()
{
	char c[11]={0};
	int a[10]={0},len=0;
	int i=0,j=0,max=0;
	while(fgets(c,11,stdin)!=EOF)
	{
		while(c[i]!='\0')
		{
			a[i]=c[i];
			i++;
		}
		max=a[0];
		len=strlen(c);
		for(j=1;j<len;j++)
		{
			if(a[0]<a[j])
			{
				a[0]=a[j];
			}
		}
		printf("%c",a[0]);
	}
	return 0;
}
[/quote]
引用 8 楼 ZXvivian 的回复:
[quote=引用 7 楼 ZXvivian 的回复:] 声明时最好同时初始化,这里使用字符串操作时需要包含string.h头文件,代码如下
#include <stdio.h>
#include "string.h"
int main()
{
	char c[11]={0};
	int a[10]={0},len=0;
	int i=0,j=0,max=0;
	while(fgets(c,11,stdin)!=EOF)
	{
		while(c[i]!='\0')
		{
			a[i]=c[i];
			i++;
		}
		max=a[0];
		len=strlen(c);
		for(j=1;j<len;j++)
		{
			if(a[0]<a[j])
			{
				a[0]=a[j];
			}
		}
		printf("%c",a[0]);
	}
	return 0;
}
上面准备用红字体的。。点错了
#include <stdio.h>
#include "string.h"
int main()
{
	char c[11]={0};
	int a[10]={0},len=0;
	int i=0,j=0,max=0;
	while(fgets(c,11,stdin)!=EOF)
	{
		while(c[i]!='\0')
		{
			a[i]=c[i];
			i++;
		}
		max=a[0];
		len=strlen(c);
		for(j=1;j<len;j++)
		{
			if(a[0]<a[j])
			{
				a[0]=a[j];
			}
		}
		printf("%c",a[0]);
	}
	return 0;
}
[/quote] 恩 题目是“多组输入,每组一行,每行一个字符串(由可打印字符组成,长度不超过10).” 用fgets输入的话 如果输入超过了10个字符 会自动进行下一次的判断大小 也就是会输出两个最大的ascII码字符 还是有问题啊
zxvivian 2014-03-01
  • 打赏
  • 举报
回复
引用 7 楼 ZXvivian 的回复:
声明时最好同时初始化,这里使用字符串操作时需要包含string.h头文件,代码如下
#include <stdio.h>
#include "string.h"
int main()
{
	char c[11]={0};
	int a[10]={0},len=0;
	int i=0,j=0,max=0;
	while(fgets(c,11,stdin)!=EOF)
	{
		while(c[i]!='\0')
		{
			a[i]=c[i];
			i++;
		}
		max=a[0];
		len=strlen(c);
		for(j=1;j<len;j++)
		{
			if(a[0]<a[j])
			{
				a[0]=a[j];
			}
		}
		printf("%c",a[0]);
	}
	return 0;
}
上面准备用红字体的。。点错了
#include <stdio.h>
#include "string.h"
int main()
{
	char c[11]={0};
	int a[10]={0},len=0;
	int i=0,j=0,max=0;
	while(fgets(c,11,stdin)!=EOF)
	{
		while(c[i]!='\0')
		{
			a[i]=c[i];
			i++;
		}
		max=a[0];
		len=strlen(c);
		for(j=1;j<len;j++)
		{
			if(a[0]<a[j])
			{
				a[0]=a[j];
			}
		}
		printf("%c",a[0]);
	}
	return 0;
}
zxvivian 2014-03-01
  • 打赏
  • 举报
回复
声明时最好同时初始化,这里使用字符串操作时需要包含string.h头文件,代码如下
#include <stdio.h>
#include "string.h"
int main()
{
	char c[11]={0};
	int a[10]={0},len=0;
	int i=0,j=0,max=0;
	while(fgets(c,11,stdin)!=EOF)
	{
		while(c[i]!='\0')
		{
			a[i]=c[i];
			i++;
		}
		max=a[0];
		len=strlen(c);
		for(j=1;j<len;j++)
		{
			if(a[0]<a[j])
			{
				a[0]=a[j];
			}
		}
		printf("%c",a[0]);
	}
	return 0;
}
AndyStevens 2014-02-28
  • 打赏
  • 举报
回复
纠正: fgets(c,11,stdin)
AndyStevens 2014-02-28
  • 打赏
  • 举报
回复
scanf遇到空白符就结束读取了
    while(scanf("%s",c)!=EOF)     
         {  while(c[i]!='\0') 
改成:
    	while(fgets(buf,11,stdin)))     
         {  while(c[i]!='\n') 
zhuobattle 2014-02-28
  • 打赏
  • 举报
回复
引用 2 楼 bolvdandan 的回复:
引用 1 楼 Automation_dmu 的回复:
i没有初始化。
恩 对 我用但是如果字符串中间有一个空格还是不好处理啊
用gets_s处理。 while(gets_s(c, sizeof(c))) 另外,你的代码不需要a数组,直接对c处理即可。

//注意这里会判断你的输入是否超过c的长度,所以用_s这批函数安全。
while(gets_s(c, sizeof(c)))
	{
		
		len = (int)strlen(c);
		max=c[0];
		
		for(j=1;j<len;j++)
		{
			if(max < c[j])
			{
				max = c[j];
			}
		}
		printf("%s, max = %c\n",c, max);
	}
bolvdandan 2014-02-28
  • 打赏
  • 举报
回复
引用 1 楼 Automation_dmu 的回复:
i没有初始化。
恩 对 我用但是如果字符串中间有一个空格还是不好处理啊
AndyStevens 2014-02-28
  • 打赏
  • 举报
回复
i没有初始化。
ForestDB 2014-02-28
  • 打赏
  • 举报
回复
一次不能输入超过10个字符。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧