2014-01-07 78 views
1

因此,這裏是我的簡單的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
  • 如果索引達到限制,它將啓動以下操作:
    • 如果最後一個字符不是通過k
    • 它設置回i最後空間的指數空間這將打印的所有字符從j使用到i最後一個索引,它的方式是僅達最後一個空間
    • 這將創建一個新的行
  • 最後,它會繼續從它循環的最後一個索引i必須循環後增加

通過調試模式下,我發現,在打印第一線之後,i保持在由k設置的值,並創建一個無限循環...... 我真的不能明白爲什麼...


對於剛剛那些誰是問的什麼輸出我想到的是,例如,我有串

"This text would be cut, according to limit" 

這將限制爲每輸入10個字符,但最後一個字符不是空格,它只會在第一行打印未翻譯的單詞,然後繼續這樣做NTIL串端部,這樣做的目的,是節省時間,而不是手動計數串然後在每個限制

示例輸出添加\n

This text 
would be 
cut, 
according 
to limit 
+0

你想通過改變循環內的循環計數器來實現什麼? – devnull

+0

請不要使用ASCII值作爲魔術常量。 C有''''來表示一個空格。 –

+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. 最後兩行打印字符串的剩餘

編輯你必須決定如何處理做空間,你的解決方案(else ++ii分配到k似乎並沒有工作),所以我添加了兩個print函數:第二個剝離行的beginnig空格,但你失去了這樣的字符!

+0

非常感謝,你甚至已經添加了關於剩餘字符串的信息,以後我會打擾... – 707

+1

爲了避免打印空行,我添加了另一個驗證「if(j Liviu

+0

還有一件事,我爲什麼要用'if(txt [i]!= 32 && k)'?我嘗試刪除'&& k',並且出現錯誤。 – 707

0

不應該初始化I,J,K ?

+1

不,它們是全局變量。 – Liviu

+0

是的,它們是全局變量 – 707