gpt4 book ai didi

c - 空白打印不正确

转载 作者:行者123 更新时间:2023-11-30 18:24:28 25 4
gpt4 key购买 nike

我有这个程序:

int main(void)
{
while ((c = getchar()) != EOF) {
putchar(c);
if (c == '{')
spaces += 4;
else if (c == '}')
spaces -= 4;
else if (c == '\n') {
print_spaces(spaces);
while ((c = getchar()) == ' ')
continue;
putchar(c);
}
}
}

void print_spaces(int spaces)
{
while (spaces-- > 0)
putchar(' ');
}

使用此输入运行时:

#include<stdio.h>
int main(void)
{
printf("hello, world!\n");
}

它只是打印确切的输入,而不是所需的输出 - 所需的输出是:

#include<stdio.h>
int main(void)
{
printf("hello, world!\n");
}

我哪里出错了?

最佳答案

这是因为字符 { 正在通过换行符 block 中的 while ((c = getc(f)) == ' '); 行读取。这就是为什么永远不会达到条件 c == '{' 并且空格计数器永远不会增加的原因。

据我所知,这里有两件事:

  1. 缩进取决于两个字符序列 \n{ 进行缩进,\n} 进行取消缩进。您需要某种方式来传达前一个或下一个字符是什么(下面的换行符变量)。
  2. }{ 的范例略有不同,即打印和递增与递减和打印(有点像 i++++i

下面的代码尝试通过

捕获这两点
  1. 更改空间计数器调整和打印的顺序
  2. 使用变量来传达前一个字符是什么

话虽这么说,它非常基本,不能处理极端情况或编码风格,并且很可能有更优雅的方法来做到这一点。

`

 10     int newline = 0;
11 while ((c = getc(f)) != EOF) {
12 if (c == '}') {
13 spaces -= 4;
14 }
15 if (newline == 1) {
16 print_spaces(spaces);
17 newline = 0;
18 }
19 putchar(c);
20 if (c == '{') {
21 spaces += 4;
22 } else if (c == '\n') {
23 newline = 1;
24 while ((c = getc(f)) == ' ');
25 ungetc(c, f);
26 }
27 }

`

关于c - 空白打印不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41150916/

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