Я читаю «Язык программирования 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 }
Большое спасибо. Я скучаю по «;» в конце инструкции for. Теперь все в порядке: P – twoyoung