1215787625 发表于 2023-10-28 00:37:30

小白求助

/*
        读取并显示字符串数组
*/

#include <stdio.h>
#define NUMEBR 100
int main(void)
{
        inti,k;
        char s;

        for (i = 0; i < NUMBER; i++) {
                printf("s[%d] : ", i);
                scanf("%s", s);
                if (s == " $ $ $ $ $"){
                        k = i;
                        break;
                }
        }

        for (i = 0; i < k; i++)
                printf("s[%d] = \"%s\"\n", i, s);

        return 0;
}
为什么编译不成功?

isdkz 发表于 2023-10-28 00:37:58

问题出在宏定义的地方。在代码中,宏定义的是 #define NUMEBR 100 ,而不是 #define NUMBER 100 。因此,在后续使用 NUMBER 的地方会出现错误。

要解决这个问题,只需将宏定义修正为 #define NUMBER 100 即可。修改后的代码如下:

#include <stdio.h>
#define NUMBER 100
int main(void)
{
    inti,k;
    char s;

    for (i = 0; i < NUMBER; i++) {
      printf("s[%d] : ", i);
      scanf("%s", s[ i]);
      if (strcmp(s[ i], "$$$$$") == 0){
            k = i;
            break;
      }
    }

    for (i = 0; i < k; i++)
      printf("s[%d] = \"%s\"\n", i, s[ i]);

    return 0;
}


这样修改后,代码应该能够成功编译并运行。

陶远航 发表于 2023-10-28 00:38:08

根据你提供的代码,有以下几个问题导致编译失败:

1. NUMEBR 应该是 NUMBER 的拼写错误。请将 #define NUMEBR 100 改为 #define NUMBER 100。

2. 在 scanf 函数中,使用 %s 格式化字符串输入会导致遇到空格或换行符时结束输入。如果你想要输入带有空格的字符串,可以改用 fgets 函数。例如,将 scanf("%s", s[ i]) 改为 fgets(s[ i], sizeof(s[ i]), stdin)。

3. 在条件语句 if (s[ i] == " $ $ $ $ $") 中,你不能直接用 == 运算符比较两个字符串。需要使用字符串比较函数 strcmp 来判断两个字符串是否相等。例如,将 if (s[ i] == " $ $ $ $ $") 改为 if (strcmp(s[ i], " $ $ $ $ $") == 0)。

修复上述问题后,你的代码应该能够成功编译并运行。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-10-28 00:38:34

问题解析:

编译失败的原因是代码中存在一些错误。下面我将指出并解释这些错误。

错误修正:

1. 宏定义错误:在代码中,将宏定义 NUMEBR 作为数组大小参数,但实际上应该是 NUMBER。修正宏定义为 #define NUMBER 100。

2. 数组声明错误:在代码中,将 s 声明为 char s,但实际上 NUMBER 是宏定义,应该使用正确的标识符 NUMEBR。修正数组声明为 char s。

3. 字符串比较错误:在代码中,使用 == 运算符比较字符串是否相等是错误的。C/C++中,字符串的比较需要使用函数 strcmp() 或 strncmp()。修改条件语句为 if (strcmp(s, "$ $ $ $ $") == 0)。

4. 未定义变量 k :在代码中,变量 k 在使用之前需要先进行定义。可以在循环外部添加 int k; 进行定义。

最终修正后的代码如下所示:


#include <stdio.h>
#include <string.h>

#define NUMBER 100

int main(void)
{
    int i, k;
    char s;

    for (i = 0; i < NUMBER; i++) {
      printf("s[%d] : ", i);
      scanf("%s", s);
      if (strcmp(s, "$ $ $ $ $") == 0) {
            k = i;
            break;
      }
    }

    for (i = 0; i < k; i++)
      printf("s[%d] = \"%s\"\n", i, s);

    return 0;
}


请注意,这只是上述代码的修正版本,并不能保证逻辑和功能的正确性。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 小白求助