【问题标题】:Why does code yields no results on this char comparison?为什么代码在这个 char 比较中没有产生任何结果?
【发布时间】: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的参数,这样想是不是错了?

标签: c char


【解决方案1】:

问题在于您的printf 函数。您正在为 k 使用 %s 格式说明符,而不是 %d。只需将该行更改为:

printf("Caso %d: %s \n",k,en[i]);

此外,while 条件 i&lt;8 应更改为 i&lt;7,因为有 7 个案例而不是 8 个。

至于scanf,不要认为这是一个很大的改进,但您也可以使用for 循环。

【讨论】:

  • 谢谢,8 实际上是一个错字,但还是谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 2019-02-03
  • 1970-01-01
  • 2014-02-03
相关资源
最近更新 更多