c语言 看我的哪里错了

来源:百度知道 编辑:UC知道 时间:2024/04/29 12:41:30
题目在这里http://acm.hdu.edu.cn/showproblem.php?pid=2025
我的代码
#include<stdio.h>
void main()
{
char a[100],max,temp;
while(scanf("%s",a))
{
int b[100]={0},i,k,t;
max=a[0];b[0]=1;k=0;temp=a[0];
for(i=1;a[i]!='\0';i++)
{
if(a[i]>max) { max=a[i];b[i]=1;b[k]=0;k=i;}
else if(a[i]==max) { b[i]=1;t=i;temp=max;}
if(max>temp) {b[t]=0;}
}
for(i=0;a[i]!='\0';i++)
{
printf("%c",a[i]);
if(b[i]==1)
printf("(max)");
}
printf("\n");

}
}
一直报错 说
Runtime Error (RE)
ACCESS_VIOLATION 您的程序想从一些非法的地址空间读取或向其中写入内容。一般例如指针、数组下标越界都会造成这个错误的
******************
看得出哪里出错了 分就给你 不用你重新写个 谢谢

D:\cygwin\home\chengeng>a.exe
asdfasdfasdfasdfasdfasdf
as(max)dfas(max)dfas(max)dfas(max)dfas(max)dfas(max)df
wwwwwwwwwwwwwwww
w(max)w(max)w(max)w(max)w(max)w(max)w(max)w(max)w(max)w(max)w(max)w(max)w(max)w(
max)w(max)w(max)
xxxxxxxxxxxx
x(max)x(max)x(max)x(max)x(max)x(max)x(max)x(max)x(max)x(max)x(max)x(max)
恭喜你没有问题。我运行的结果。
当然,如果你输入的字符如果大于100的话,数组b就越界了。
建议改进方案:
先找出最大字符X,在第二次打印的时候,如果该字符为A,则多打出(MAX)字样。省去没有必要的数组B。

int b[100]这个数组是多余的,因为可以先循环一次,寻找最大的字母;在输出的时候,先输出每个字符,再判断该字符是否是最大字母,如果是则再输出max

另外,你的数组a应该分配101个单元,否则在100个字符的时候会溢出,别忘记了字符串结尾符号NULL也占据一个空间。

把int b[100]={0},i,k,t;
这边的k和t初始化一下,不然下面的数组使用就不正确

你的程序根本没有错,是编译器的问题。在我的编译器中,编译连接运行都没有问题。。