You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用scanf存储char数组后排序无输出,求排查scanf与printf用法问题

字符数组按ASCII码排序的输入输出问题解决

问题描述

需要将类似ANF23ie89Z的字符数组按ASCII码排序后输出为2389AFNZei,尝试的代码运行后无输出,核心问题在于scanf和printf的使用错误。

原代码

#include <iostream>
#include <stdio.h>

using namespace std;

int main(){
    char arr[20];
    
    for(int i = 0; i < 20; i++){
        scanf(“%s”, &arr[i]);
        getchar();
    }
    
    for(int i = 0; i < 20; i++){
        for(int j = 0; j < 20 - i - 1; j++){
            if(arr[j] > arr[j+1]){
                int tmp = arr[j+1];
                arr[j+1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
 
    for(int i = 0; i < 20; i++){
        printf(“%s”, arr[i]);
    }
    puts(“”);
    return 0;
}

核心错误分析

  • scanf("%s", &arr[i]) 错误:%s是读取字符串的格式符,它会把输入内容(含自动添加的\0结束符)从&arr[i]开始写入内存,直接造成数组越界,完全不符合你“逐个存储单个字符”的需求。读取单个字符应该用%c格式符。
  • printf("%s", arr[i]) 错误:%s要求传入字符串首地址(char*类型),但arr[i]是单个char变量,传入后会被当作地址处理,导致输出错误甚至无输出。输出单个字符应该用%c格式符。
  • 输入循环逻辑混乱:循环强制要求输入20个字符,但你的目标是处理连续字符串,且getchar()会吃掉换行/空格,导致输入流程异常。
  • 排序包含无效垃圾值:数组未赋值的位置是随机垃圾值,直接对整个20长度数组排序会把这些无效值也纳入,输出结果混乱。

修正后的代码

#include <iostream>
#include <stdio.h>

using namespace std;

int main(){
    char arr[20];
    int len = 0; // 记录实际输入的字符长度

    // 直接读取整个字符串到数组,自动添加结束符\0
    scanf("%s", arr);
    // 计算实际有效字符长度
    while(arr[len] != '\0'){
        len++;
    }

    // 仅对有效字符进行冒泡排序
    for(int i = 0; i < len; i++){
        for(int j = 0; j < len - i - 1; j++){
            if(arr[j] > arr[j+1]){
                char tmp = arr[j]; // 用char类型存临时值更匹配
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }
 
    // 逐个输出有效字符
    for(int i = 0; i < len; i++){
        printf("%c", arr[i]);
    }
    puts("");
    return 0;
}

关键修改说明

  1. 输入优化:用scanf("%s", arr)直接读取连续字符串,arr本身就是数组首地址,无需取址符&,系统自动添加\0标记字符串结束。
  2. 有效长度计算:通过循环找到\0位置,得到实际输入字符数,避免排序垃圾值。
  3. 排序范围限制:冒泡排序的循环次数基于实际长度len,只处理输入的有效字符。
  4. 输出格式修正:用%c格式符逐个输出单个字符,匹配需求。
  5. 临时变量类型调整:交换字符用char类型,避免不必要的类型转换。

内容的提问来源于stack exchange,提问作者Oyasumi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:10:28