在我的输出中,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();
}
答案 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;
}