【发布时间】:2021-02-18 22:11:59
【问题描述】:
晚上,很抱歉初学者的问题,但我必须编写一个代码,接收 7 个不同语言的称呼,与数据库进行比较,如果匹配,请说明称呼使用的是哪种语言,如果不匹配,请告诉用户语言未知。
我想我理解了这个问题,但是我下面的代码没有显示任何结果,只是关闭了,有人能告诉我为什么吗?我知道这是非常粗略的编码,但无法准确找到错误。 (如果能告诉我 scanf 中的多个变量的替代品也将不胜感激)。
#include<stdio.h>
#include<string.h>
int main(){
char en[7][15];
char id[7][15] = {"HELLO","HOLA","CIAO","HALLO","BOUNJOUR","ZDRAVSTVUJTE","."};
char re[7][15] = {"INGLES","ESPANOL","ITALIANO","ALEMAN","FRANCES","RUSO","NLS"};
scanf("%s %s %s %s %s %s %s",en[0],en[1],en[2],en[3],en[4],en[5],en[6]);
int i = 0,j=0,m=1,k=0;
while(i<8){
for(j=0;j<7;j++){
m=strcmp(en[i],id[j]);
if(m==0 || j==6){
strcpy(en[i],re[j]);
k=i+1;
printf("Caso %s: %s /n",k,en[i]);
break;
}
}
i++;
}
}
谢谢
【问题讨论】:
-
你是说 j 永远不会达到 6?
-
总是检查
scanf的返回值。如果输入与预期不符,则不会实际设置所有值。 -
除了对循环变量的一些奇怪限制之外,
printf("Caso %s: %s /n",k,en[i]);行显然是错误的!对于整数参数 (k),您需要%d格式说明符,而不是%s;这将导致未定义的行为,可能会导致您的程序在第一次尝试printf调用时崩溃。 -
您是否启用了警告? gcc 在
printf电话中告诉我这个程序:warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat=] -
@nicomp 确实如此,但我认为如果它达到 6,它(应该)意味着没有语言是匹配的,所以它应该被分配为未知,这就是为什么 match 和 j==6 都是if的参数,这样想是不是错了?