簡體   English   中英

無限循環

[英]An infinite loop

我正在閱讀“ C編程語言”,並且正在做練習1-18:

 Write a program to remove trailing blanks and tabs from each line of input, and to delete entirely blank lines.

我編寫了一個程序,如下所示,但結果卻是一個無限循環。 我使用gdb並發現第38行是無限進行的: if(arr[i] == '\\t') ,即使arr [i] =='\\ t'不成立。 它出什么問題了?

01 #include <stdio.h>
02 #define MAXLINE 1000
03 
04 int delete(char arr[],int maxline);
05 int getlines(char arr[], int maxline);
06
07 int main(){
08     char arr[MAXLINE];
09     int len,i;
10     while((len = getlines(arr, MAXLINE)) > 0){
11         if(delete(arr, MAXLINE))
12             printf("%s",arr);
13     }
14     return 0;
15 }
16
17 /* Function getlines is used to input lines */
18 int getlines(char arr[], int maxline){
19    int i = 0,c;
20    while( i < maxline-1 && (c = getchar()) != EOF && c != '\n'){
21        arr[i] = c;
22        i++;
23    }
24    if( c == '\n'){
25        arr[i] = c;
26        i++;
27    }
28    arr[i] = '\0';
29    return i;
30 }
31
32 /* Function delete is used to delete tab and trailing blanks */
33 int delete(char arr[],int maxline){
34    int i = 0;
35    if(arr[i] == '\n') return 0;  /* if it's a blank line, return 0 */
36    int j;
37    while( arr[i] != '\0'){
38        if(arr[i] == '\t')
39            for( j = i; (arr[j] = arr[j+1]) != '\0'; j++)
40        i++;
41    }
42    for( j = i; j < maxline; j++)
43        arr[j] = arr[j+1];
44    return 1;
45 }

您在第39行的循環沒有終止。

for( j = i; (arr[j] = arr[j+1]) != '\0'; j++)

所以它呼吁

i ++ ;

作為它的身體。

最少使用:

for( j = i; (arr[j] = arr[j+1]) != '\0'; j++) { }

更好的是,加上{}:

{ for( j = i; (arr[j] = arr[j+1]) != '\0'; j++) { } }

您永遠不會到達第40行,該行會增加i。 這就是為什么您永遠不會退出從第37行開始的循環的原因。

在下面的代碼中, arr[i] != '\\0'導致無限循環。 您沒有正確地增加i

while( arr[i] != '\0')
{
    if(arr[i] == '\t')
        for( j = i; (arr[j] = arr[j+1]) != '\0'; j++)
            i++;
}

使用以下代碼刪除標簽,

while( arr[i] != '\0')
{
    {
        if(arr[i] == '\t')
        for( j = i; (arr[j] = arr[j+1]) != '\0'; j++)
            i++;
    }
    i++; // Increment i here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM