如何无printf提示读取用户输入的10个字符串并排序输出?
C语言程序修改方案
针对需求(无输入提示信息、仅输出按字母顺序排序后的字符串),对现有代码做以下3处关键修改:
- 移除输入提示语句:删除读取字符串时的
printf("Enter string #%d: ", i+1);,避免输出额外提示内容 - 修正排序逻辑:修改
compare_strings函数的返回值,将strcmp(*(const char**)b, *(const char**)a)改为strcmp(*(const char**)a, *(const char**)b),实现正序字母排序 - 优化输出格式(可选):原代码用空格分隔所有字符串,若需每行输出一个排序结果,可将
printf("%s ", strings[i]);改为printf("%s\n", strings[i]);,保持输出简洁直观
修改后的完整代码
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ARRAY_LENGTH 10 #define MAX_STRING_LENGTH 100 int compare_strings(const void *a, const void *b) { // 改为正序字母排序的比较逻辑 return strcmp(*(const char**)a, *(const char**)b); } int main() { char *strings[ARRAY_LENGTH]; char input_string[MAX_STRING_LENGTH]; // 读取10个字符串,无任何提示信息 for (int i = 0; i < ARRAY_LENGTH; i++) { fgets(input_string, MAX_STRING_LENGTH, stdin); input_string[strcspn(input_string, "\n")] = '\0'; // 移除换行符 strings[i] = malloc(strlen(input_string) + 1); // 为字符串分配内存 strcpy(strings[i], input_string); } // 按字母顺序排序字符串数组 qsort(strings, ARRAY_LENGTH, sizeof(char*), compare_strings); // 输出排序后的字符串,此处采用每行一个的格式 for (int i = 0; i < ARRAY_LENGTH; i++) { printf("%s\n", strings[i]); free(strings[i]); // 释放已分配的内存 } return 0; }
内容的提问来源于stack exchange,提问作者amarveer rehal
相关产品推荐
相关产品推荐

