为什么这个代码输出显示错误
#include <stdio.h>#include <string.h>
int main(void)
{
/*********Begin*********/
char max,min,a,b;
gets(a);
getchar();
gets(b);
int c=0,n=0,min1;
n = n+1;
for(c=0;b='\0';c++){
if(b-b>0){
max = b;
}
else{
max = b;
}
}
for(c=0;a='\0';c++){
if(a-a>0){
min = a;
min1 = c;
}
else{
min = a;
min1 = c;
}
}
for(c=0;c<min1;c++){
printf("%c",a);
}
printf("%s",max);
for(c;c!='\0';c++){
printf("%c",a);
}
return 0;
} 这段代码存在多个问题,导致输出错误。以下是代码中存在的问题和解决方法:
1.gets()函数已经被标记为不安全,应该使用fgets()函数来替代。 gets()函数容易导致缓冲区溢出,因此不推荐使用。
2. 在for循环中,条件表达式使用了赋值操作符= ,应该使用相等判断操作符== 。
3. 在比较字符大小时,应该使用字符的 ASCII 值进行比较。
4. 在输出字符串时,应该使用%s格式化输出整个字符串,而不是单个字符。
5. 在最后一个for循环中,应该使用c < strlen(a)作为条件,而不是c != '\0' 。
下面是修复后的代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
char max, min, a, b;
fgets(a, 100, stdin);
fgets(b, 100, stdin);
int c = 0, n = 0, min1 = 0;
for (c = 0; b != '\0'; c++) {
if (b > max) {
max = b;
}
}
for (c = 0; a != '\0'; c++) {
if (a < min) {
min = a;
min1 = c;
}
}
for (c = 0; c < min1; c++) {
printf("%c", a);
}
printf("%c", max);
for (c = min1 + 1; c < strlen(a); c++) {
printf("%c", a);
}
return 0;
}
这样就修复了代码中的问题,可以正确输出结果。
页:
[1]