为什么还没输入就直接结束运行(Babelfish)

#我的思路
#include<stdio.h>
#include<string.h>
int main(){
char foreign[100001][11],eng[100001][11];
int i=0,n=0;
while(1) {
char t;
if((t=getchar())=='\n') break;
else {
eng[n][0] = t;
int i = 1;
while(1){
t = getchar();
if(t ==' ') {
eng[n][i] = '\0';
break;
} else
eng[n][i++] = t;
}
}
scanf("%s",foreign[n]);
getchar();
n++;
}
int j;
char swap[11];
for(i=1;i<n;i++){
for(j=0;j<n-i;j++){
if(strcmp(foreign[j],foreign[j+1])>0){
strcpy(swap,foreign[j]);
strcpy(foreign[j],foreign[j+1]);
strcpy(foreign[j+1],swap);
strcpy(swap,eng[j]);
strcpy(eng[j],eng[j+1]);
strcpy(eng[j+1],swap);
}
}
}
char find[11];
int flag=0,max=n-1,min=0,mid;
while(scanf("%s",find)!=EOF){
flag=0;
while(min<max){
mid=(min+max)/2;
if(strcmp(foreign[mid],find)==0){
flag=1;
printf("%s\n",eng[mid]);
break;
}else if(strcmp(foreign[mid],find)<0){
max=mid;
}else if(strcmp(foreign[mid],find)>0){
min=mid;
}
}
if(flag==0){
printf("eh\n");
}
}
return 0;
}

char foreign[100001][11],eng[100001][11];局部变量的数组长度太大了
函数内局部变量的数组长度不能太大
把数组定义放在 main()函数外面改成全局变量的数组即可.
或者用 malloc()动态分配内存空间
局部变量是在程序运行栈上自动分配的,一般运行栈的大小是比较小的,大约即1~2MB,如果你定义一个很大的局部变量,很可能导致栈溢出。
而全局变量是在数据段中在程序加载时自动分配,大小可以定义的很大,只要你的电脑内存足够大。

#include <stdio.h>
#include <string.h>
char foreign[100001][11], eng[100001][11]; // 放在 main()函数外面改成全局变量的数组即可.
int main()
{
   ...................

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img


6

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632