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:12 编辑
arr = ch;
printf("%c", *(arr+i));
本帖最后由 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;
} 谢谢楼主!!!帮我解决了好多问题,而且我发现我真的不注重细节!另外,我想问一下,getchar返回的类型是int,为什么ch用char类型的也无所谓呢[笑cry];length我当时用unsigned int也是因为strlen返回的是int类型,编译器建议我改,我也就改了 baige 发表于 2020-9-1 15:15
问题写在注释里了,另外不要用unsigned int, 它没有负数,会导致当i = 0, 的时候继续减下去就会变成最大...
谢谢楼主!!!帮我解决了好多问题,而且我发现我真的不注重细节!另外,我想问一下,getchar返回的类型是int,为什么ch用char类型的也无所谓呢[笑cry];length我当时用unsigned int也是因为strlen返回的是int类型,编译器建议我改,我也就改了 z2521367787 发表于 2020-9-1 15:22
谢谢楼主!!!帮我解决了好多问题,而且我发现我真的不注重细节!另外,我想问一下,getchar返回的类型是i ...
char类型也可以存放整形,范围在-128~127; baige 发表于 2020-9-1 20:43
char类型也可以存放整形,范围在-128~127;
好,谢谢!
页:
[1]