由另一个人分配给一个柜台的价值,防止反向增加?

时间:2014-01-07 13:19:15

标签: c loops indexing

所以这是我简单的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();
}

我的计划的作用:

  • 通过增量计算变量达到某个限制
  • 如果当前字符是空格(ASCII 32),则i的索引将复制到k
  • 如果索引达到限制,则会启动以下内容:
    • 如果最后一个字符不是空格,则会通过ik设置回最后一个空格的索引
    • 它会打印j中使用的最后一个索引中的所有字符,直至i,顺便说一下,这只是最后一个空格
    • 会创建一个新行
  • 最后,它继续从它的最后一个索引i开始循环,它必须在一个循环之后递增

通过调试模式,我发现打印完第一行后,i仍保持k设置的值并创建无限循环... 我不能真的弄明白为什么......


对于那些询问我期望输出的人,例如,我有字符串

"This text would be cut, according to limit" 

这将限制为每行10个字符但如果最后一个字符不是空格,它只会在第一行打印未溢出的单词,然后继续这样做直到字符串结束,这样做的目的是保存时间,而不是手动计算字符串,然后在每个限制

添加\n

示例输出:

This text 
would be 
cut, 
according
 to limit

2 个答案:

答案 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);

的变化:

  1. (i-j)%limit:因为您需要其他limit字符

  2. if(txt[i] != 32 && k) {i=k;k=0;}:您不想回到同一个索引

  3. 最后两行打印剩余的字符串

  4. 编辑您必须决定如何处理这些空格,您的解决方案(else ++i i分配到k似乎不起作用),所以我添加了两个print函数:第二个函数删除了行的开头处的空格,但是你丢失了这样的字符!

答案 1 :(得分:0)

你不应该初始化i,j,k?