2014-07-06 42 views
-3

我正在制作的程序应该打印出只以'ed'结尾的字符串。这是我到目前为止,但我不明白为什么它不起作用。我是否误解了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; 
} 

感谢所有的输入家伙!然而,当我通过键盘输入字符串时,程序仍然不会输出结尾的字符串,它编译得很好。以下是我所修改的内容:

#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

问问自己:“长度的值是多少循环的每次迭代?“ – Gabe

+1

这是一个很差的标题和说明。而不是“不起作用”,解释实际发生的事情,以及你期望发生的事情。使标题反映这一点。 –

+0

您需要阅读http://stackoverflow.com/help/mcve,然后阅读http://ericlippert.com/2014/03/05/how-to-debug-small-programs/。它会帮助你比我们更多地给你解决方案。 – nonsensickle

回答

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.

+2

而且还应该检查'length> = 2'以避免指出数组。 – DrV

+0

并且请不要在循环中声明变量,您应该在循环外部声明长度变量(即使最新的编译器允许它,这仍然是一个不好的做法) – Lectem

+0

尽管您的答案是正确的,但我觉得很难阅读(太简洁)。如果你再详细一点,这将是完美的。请记住,他似乎是C的新手。 – nonsensickle

相关问题