不明白为什么这个程序不起作用?

时间:2014-07-06 22:56:21

标签: c

我正在制作的节目应该打印出仅在“结束”字符串中输出的字符串。这是我到目前为止所做的,但我不明白为什么它不起作用。我是否误解了使用if语句的for循环背后的逻辑,或者我只是完全错了?

#include <stdio.h>
#include <string.h>

int main () 
{ 
    char string[10][100]; 
    int i; 

    for ( i =0; i<=10; i++)
    { 
       printf(" Please enter a string for the array \n"); 
       fgets( string[i], 100, stdin); 
    } 

    int length = strlen(string[i]); 

    for ( i=0; i<=10; i++)
    { 
       if( string[i][length] == 'd' && string[i][length -1] == 'e' )
       { 
          printf(" Index %d: %s \n", i,  string[i]); 
       }  
    } 
    return 0; 
}

感谢所有输入的人!但是,该程序仍然没有输出结束于&#39;当我通过键盘进入它们时,它编译得很好。这是我修改过的内容:

#include <stdio.h>
#include <string.h>

int main () 
{ 
  char string[10][100]; 
  int i;
  int length;

  for ( i =0; i < 10; i++)
  { 
     printf(" Please enter a string for the array \n"); 
     fgets( string[i], 100, stdin); 
  } 

  for ( i=0; i< 10; i++)
  { 
     length = strlen(string[i]); 

     if( length > 1 && (string[i][length - 1] == 'd' && string[i][length -2] == 'e') )
     { 
        printf(" Index %d: %s \n", i,  string[i]); 
     }  
  } 

  return 0;     
}

1 个答案:

答案 0 :(得分:3)

您的指数不正确。在C中,索引从0开始。第一个循环应该是:

for ( i = 0; i < 10; i++ )

第二个循环中的索引也不正确。他们应该是:

int length = strlen ( string[i] );
if( length > 1 && ( string[i][length-1] == 'd' && string[i][length -2] == 'e' ) )

在上面的陈述中,由于索引从0开始,最后一个元素将在length-1。如果您的字符串是smiled,则索引0处的字符为s,最后一个字符位于索引5(d),而字符串的长度为6。