鱼C论坛

 找回密码
 立即注册
查看: 1106|回复: 6

[已解决]C语言 反向输出字符串

[复制链接]
发表于 2020-9-1 14:23:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1  #include <stdio.h>
2  #include <string.h>
3
4  void reverse_printf(char *, unsigned int);
5
6  void reverse_printf(char *arr, unsigned int length) {
7     unsigned int i;
8     for (i = length; i >= 0; i--) {
9         printf("%c", arr[i]);
10    }
11 }
12
13 int main(void) {
14    printf("请输入一句以感叹号为结尾的句子:");
15    int ch, i = 0;
16    char arr[100];
17    while ((ch = getchar()) != '\n' && i <= 100) {
18         ch = arr[i++];
19    }
20    unsigned int length = strlen(arr);
21    reverse_printf(arr, length);
22 }
    各位大佬好,这是小甲鱼的作业,反向输出字符串,在《递归》的章节中的。我自己没有用递归,尝试自己解决,却发现程序一直有错误。当我输入“hello world!",回车之后没有输出任何东西。我用的是Clion,编译器没给出任何错误提示,只是在第17行提示ch这个变量is never used。我想知道我这个程序的错误到底在哪里,希望有大佬能够解决。第一次发帖,可能格式不大对,还请见谅
最佳答案
2020-9-1 15:15:47
本帖最后由 baige 于 2020-9-1 20:45 编辑

问题写在注释里了,另外不要用unsigned int, 它没有负数,会导致当i = 0, 的时候继续减下去就会变成最大 导致for循环死循环
#include <stdio.h>
#include <string.h> 
void reverse_printf(char *, int);

void reverse_printf(char *arr, int length) 
{
        int i;
        // i 从length-1开始 
        for (i = length-1; i >= 0; i--) 
        {
                // arr[i]
                printf("%c", arr[i]);
        }
}

int main(void) 
{
        printf("请输入一句以感叹号为结尾的句子:");
        // char类型 
        char ch;
        int i = 0;
        char arr[100];
        while ((ch = getchar()) != '\n' && i <= 100) 
        {
                // arr[i++] = ch;
                arr[i] = ch;
                i++;
        }
        // 注意为arr数组添加结束标志 
        arr[i] = '\0'; 
        int length = strlen(arr);
        reverse_printf(arr, length);
        return 0; 
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-1 15:09:14 | 显示全部楼层
本帖最后由 Cool_Breeze 于 2020-9-1 15:12 编辑

arr[i++] = ch;

printf("%c", *(arr+i));
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-1 15:15:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 baige 于 2020-9-1 20:45 编辑

问题写在注释里了,另外不要用unsigned int, 它没有负数,会导致当i = 0, 的时候继续减下去就会变成最大 导致for循环死循环
#include <stdio.h>
#include <string.h> 
void reverse_printf(char *, int);

void reverse_printf(char *arr, int length) 
{
        int i;
        // i 从length-1开始 
        for (i = length-1; i >= 0; i--) 
        {
                // arr[i]
                printf("%c", arr[i]);
        }
}

int main(void) 
{
        printf("请输入一句以感叹号为结尾的句子:");
        // char类型 
        char ch;
        int i = 0;
        char arr[100];
        while ((ch = getchar()) != '\n' && i <= 100) 
        {
                // arr[i++] = ch;
                arr[i] = ch;
                i++;
        }
        // 注意为arr数组添加结束标志 
        arr[i] = '\0'; 
        int length = strlen(arr);
        reverse_printf(arr, length);
        return 0; 
}

评分

参与人数 1荣誉 +5 鱼币 +1 贡献 +3 收起 理由
z2521367787 + 5 + 1 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2020-9-1 15:22:07 | 显示全部楼层
谢谢楼主!!!帮我解决了好多问题,而且我发现我真的不注重细节!另外,我想问一下,getchar返回的类型是int,为什么ch用char类型的也无所谓呢[笑cry];length我当时用unsigned int也是因为strlen返回的是int类型,编译器建议我改,我也就改了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-1 15:22:39 | 显示全部楼层
baige 发表于 2020-9-1 15:15
问题写在注释里了,另外不要用unsigned int, 它没有负数,会导致当i = 0, 的时候继续减下去就会变成最大  ...


谢谢楼主!!!帮我解决了好多问题,而且我发现我真的不注重细节!另外,我想问一下,getchar返回的类型是int,为什么ch用char类型的也无所谓呢[笑cry];length我当时用unsigned int也是因为strlen返回的是int类型,编译器建议我改,我也就改了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-1 20:43:29 | 显示全部楼层
z2521367787 发表于 2020-9-1 15:22
谢谢楼主!!!帮我解决了好多问题,而且我发现我真的不注重细节!另外,我想问一下,getchar返回的类型是i ...


char类型也可以存放整形,范围在-128~127;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-3 11:04:21 | 显示全部楼层
baige 发表于 2020-9-1 20:43
char类型也可以存放整形,范围在-128~127;

好,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 06:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表