For循环在C中执行条件限制

时间:2013-11-01 10:12:56

标签: c for-loop

在我的输出中,everthing很好,只是它需要一个NULL字符才是正确的,错误的是在for循环检查数组*ans[]={"zero","one","two"};inp之间的条件之后: sel的最后一个数字是2,并且我的条件仍然为真,它执行sel++,这使sel = 3这是我的限制,导致接受NULL输入。 如何限制 sel 在我的for循环中执行限制?

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

void main(){
    char    inp[256]={0},
            *ans[]={"zero","one","two"};
    int     sel,
            ans_cnt=sizeof(ans)/sizeof(ans[0]); // Equals to 3
    do{
        clrscr();
        printf("Enter Any:\n\"zero\" or \n\"one\"  or \n\"three\": ");
        gets(inp);
        for(sel=0;sel<ans_cnt && strcmp(inp,ans[sel]);sel++);
        }
    while(strcmp(inp,ans[sel]));
    printf("Valid Answer!");
    getch();
    }

2 个答案:

答案 0 :(得分:3)

问题是如果在内部for循环中找不到字符串,则sel将为3。这会导致以下ans条件中的while被索引越界。

这可以通过将while条件更改为仅检查:

来解决
while (sel == ans_cnt);

答案 1 :(得分:0)

而不是它你可以使用break。

while ( TRUE ) {
  clrscr();
  printf("Enter Any:\n\"zero\" or \n\"one\"  or \n\"three\": ");
  gets(inp);
  for(sel=0;sel<ans_cnt && strcmp(inp,ans[sel]);sel++);
  if ( sel < 3 ) // It means for loop was ended before the sel < ans_cnt condition
    break;
}