1215787625 发表于 2023-11-22 19:36:58

为什么这个代码输出显示错误

#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;
}

isdkz 发表于 2023-11-22 19:37:10

这段代码存在多个问题,导致输出错误。以下是代码中存在的问题和解决方法:

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]
查看完整版本: 为什么这个代码输出显示错误