我不知道自己在做什么错,也无法自己解决。
void text_printer(char text[], int wrap_size)
{
bool space_check;
for (int sub = 0; text[sub] != '\0'; sub++)
{
space_check = false;
if (sub % wrap_size == 0 && sub != 0)
space_check = true;
if (space_check == true && text[sub] == ' ')
{
cout << endl;
}
else
{
cout << text[sub];
}
}
}
第二条if语句在应该执行的时候不执行。
ah yes you are here for tea
如果我将其传递给它,则输出时它不会改变。
它可以很好地编译并且没有错误,所以我认为这是我的代码有问题,但是我不知道它是什么。
答案 0 :(得分:2)
您的代码遇到了一些麻烦。我将描述其中之一。 @artm描述了另一个。如果wrap_size
为9怎么办,输入行就像“ 12345678901234567 12 45 78 01”。然后您的代码将像这样拆分它
12345678901234567
12
45 78 01
我想这不是您想要的,而必须是
12345678901234567
12 45 78
01
所以正确的解决方案应该像下面这样
void text_printer(char text[], int wrap_size)
{
for (int sub = 0, count = 0; text[sub] != '\0'; sub++, count++)
{
bool space_check = count >= wrap_size;
if (space_check && text[sub] == ' ')
{
cout << endl;
count = 0;
}
else
{
cout << text[sub];
}
}
}
答案 1 :(得分:0)
此操作无效,因为您在此逻辑上有缺陷if (space_check == true && text[sub] == ' ')
当space_check == true
但text[sub]
不是空格时会发生什么,现在space_check
将被重置转到下一个循环的false
,您将错过新行。
这是正确处理逻辑的一种方法。添加一个新变量idx
来跟踪最后一个空格字符已经通过了多少个字符,然后确保断开该行(并在下一轮重置idx
)。
int idx = 0;
for (int sub = 0; text[sub] != '\0'; sub++, idx++)
{
space_check = false;
if (idx >= wrap_size && sub != 0)
space_check = true;
if (space_check == true && text[sub] == ' ')
{
cout << endl;
idx = 0;
}
else
{
cout << text[sub];
}
}