0

在我的输出中,一切都很好,除了它需要一个 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();
    }
4

2 回答 2

3

for问题是如果在内循环中找不到字符串,那么sel将是3. 这会导致ans在以下while条件下被索引超出范围。

这可以通过更改while条件以仅检查来解决:

while (sel == ans_cnt);
于 2013-11-01T10:16:42.847 回答
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;
}
于 2013-11-01T10:37:06.753 回答