z2521367787 发表于 2020-9-1 14:23:39

C语言 反向输出字符串

1#include <stdio.h>
2#include <string.h>
3
4void reverse_printf(char *, unsigned int);
5
6void reverse_printf(char *arr, unsigned int length) {
7   unsigned int i;
8   for (i = length; i >= 0; i--) {
9         printf("%c", arr);
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;
19    }
20    unsigned int length = strlen(arr);
21    reverse_printf(arr, length);
22 }
    各位大佬好,这是小甲鱼的作业,反向输出字符串,在《递归》的章节中的。我自己没有用递归,尝试自己解决,却发现程序一直有错误。当我输入“hello world!",回车之后没有输出任何东西。我用的是Clion,编译器没给出任何错误提示,只是在第17行提示ch这个变量is never used。我想知道我这个程序的错误到底在哪里,希望有大佬能够解决。第一次发帖,可能格式不大对,还请见谅

Cool_Breeze 发表于 2020-9-1 15:09:14

本帖最后由 Cool_Breeze 于 2020-9-1 15:12 编辑

arr = ch;

printf("%c", *(arr+i));

baige 发表于 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
                printf("%c", arr);
        }
}

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

z2521367787 发表于 2020-9-1 15:22:07

谢谢楼主!!!帮我解决了好多问题,而且我发现我真的不注重细节!另外,我想问一下,getchar返回的类型是int,为什么ch用char类型的也无所谓呢[笑cry];length我当时用unsigned int也是因为strlen返回的是int类型,编译器建议我改,我也就改了

z2521367787 发表于 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类型,编译器建议我改,我也就改了

baige 发表于 2020-9-1 20:43:29

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

char类型也可以存放整形,范围在-128~127;

z2521367787 发表于 2020-9-3 11:04:21

baige 发表于 2020-9-1 20:43
char类型也可以存放整形,范围在-128~127;

好,谢谢!
页: [1]
查看完整版本: C语言 反向输出字符串