gpt4 book ai didi

C程序打印换行符

转载 作者:太空宇宙 更新时间:2023-11-04 07:54:05 25 4
gpt4 key购买 nike

下面是我的 K&R 练习 1-19 的 C 程序。

#include <stdio.h>
#define MAXLINE 999

int main (void) {
printf("Line Reverser.\n");
printf("This program reverses the input per line.\n");
middle ();
}
int middle (void) {
reverse ();
printf("\n");
middle ();
}
int reverse (void) {
int i, c;
char s[MAXLINE] = {0};
for (i = 0; ((c = getchar()) != '\n') && (i <= MAXLINE); ++i) {
s[i] = c;
};
if (c == '\n') {
s[i] = c;
++i;
};
for (i = MAXLINE; (s[i] != '0') && i >= 0; --i) {
printf("%c", s[i]);
};
return 0;
}

当我使用 Code::Blocks 运行它时,如果输入是 asdf,我会得到以下输出。

Line Reverser.
This program reverses the input per line.
asdf










fdsa

我希望输出只是 fdsa,没有 10 个换行符。我不明白为什么要打印 10 个换行符。我错过了什么?

编辑:我知道这可以更有效地完成,但这是我的第一次尝试,我将其作为一种学习经验,了解为什么要打印换行符。

最佳答案

您的代码大部分是正确的。在读取输入结束时,变量i已经保存了输入字符串的长度,因此只需以此为起点开始反转即可。您可能不需要在 s 的末尾保存回车,因为您不希望它位于输出的开头。另请注意,在从 main 调用它之前,您需要声明 reverse。所以你可以把函数声明放在main上面而把定义留在下面,或者把整个函数定义移到main上面。所以,这样的事情是正确的:

#include <stdio.h>
#define MAXLINE 999

int reverse (void);

int main (void) {
printf("Line Reverser.\n");
printf("This program reverses the input per line.\n");
reverse ();
}

int reverse (void) {
int i, j, c;
char s[MAXLINE] = {0};
for (i = 0; ((c = getchar()) != '\n') && (i <= MAXLINE); ++i) {
s[i] = c;
}

for (j = i; (s[j] != '0') && j >= 0; --j) {
printf("%c", s[j]);
}
printf("\n");
return 0;
}

关于C程序打印换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51715661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com