所以这是我简单的C代码:
#include<stdio.h>
#include<conio.h>
#include<string.h>
int i, j, k;
void main(){
int limit=10;
char txt[]="This text would be cut, according to limit";
clrscr();
for(i; i<strlen(txt); i++){
if(txt[i] == 32) k=i;
if(i!=0 && i%limit == 0){
if(txt[i] != 32) i=k;// This is what bugs the program
while(j<i) printf("%c",txt[j++]);
printf("\n");
}
}
getch();
}
我的计划的作用:
i
的索引将复制到k
i
将k
设置回最后一个空格的索引j
中使用的最后一个索引中的所有字符,直至i
,顺便说一下,这只是最后一个空格i
开始循环,它必须在一个循环之后递增通过调试模式,我发现打印完第一行后,i
仍保持k
设置的值并创建无限循环... 我不能真的弄明白为什么......
对于那些询问我期望输出的人,例如,我有字符串
"This text would be cut, according to limit"
这将限制为每行10个字符但如果最后一个字符不是空格,它只会在第一行打印未溢出的单词,然后继续这样做直到字符串结束,这样做的目的是保存时间,而不是手动计算字符串,然后在每个限制
添加\n
示例输出:
This text
would be
cut,
according
to limit
答案 0 :(得分:2)
我修改了你的代码:
void PrintText(const char txt[])
{
if (j<i) {
while(j<i) printf("%c",txt[j++]);
printf("\n");
}
}
void PrintText_StripLeft(const char txt[])
{
for (; (j < i) && (32 == txt[j]); ++j);
PrintText(txt);
}
和main
:
for(i; i<strlen(txt); i++){
if(txt[i] == 32) k=i;
if(i!=0 && (i-j)%limit == 0){
if(txt[i] != 32 && k){i=k;k=0;}
PrintText_StripLeft(txt);
}
}
PrintText_StripLeft(txt);
的变化:
(i-j)%limit
:因为您需要其他limit
字符
if(txt[i] != 32 && k) {i=k;k=0;}
:您不想回到同一个索引
最后两行打印剩余的字符串
编辑您必须决定如何处理这些空格,您的解决方案(else ++i
i
分配到k
似乎不起作用),所以我添加了两个print
函数:第二个函数删除了行的开头处的空格,但是你丢失了这样的字符!
答案 1 :(得分:0)
你不应该初始化i,j,k?