yueyufeng 发表于 2023-12-1 18:13:56

输出不对

FishC_GPT 发表于 2023-12-1 18:14:20

您的代码中存在一些错误和不足之处。以下是对代码的具体修改和解释:

1. 在包含正确的头文件之前,应该包含`#include <stdio.h>`以及`#include <string.h>`。

2. 字符型变量`x`和`y`应该声明为字符数组,而不是单个字符。例如,`char x;`

3. 变量`result`应该声明为字符数组,而不是字符。例如,`char result = "";`

4. 在使用`fgets`函数时,在每行输入后会自动包含换行符(`\n`),需要将其删除。可以使用`strtok`函数将字符串的末尾的换行符去掉。例如,`strtok(x, "\n");`

5. 在字符串比较时,应该使用`strcmp`函数,而不是`==`运算符。例如,`if (strcmp(x, y) == 0)`

6. `strcpy`函数用于复制字符串,但在使用前需要确保目标字符串有足够的空间。在这种情况下,可以使用`strncpy`函数来复制字符串,并指定目标字符串的长度。例如,`strncpy(result, x, MAX_SIZE);`

7. 如果没有找到相同的字符串,`result`仍然为空字符,因此在比较`result`时应该使用`strcmp(result, "") == 0`来检查是否为空。

8. 注意,使用`fgets`函数读取一行字符串后,会自动将换行符也存储在字符串中。您可以使用`strtok`函数将换行符去掉,或者在比较时忽略换行符。

以下是更新后的代码:

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

#define MAX_SIZE 100

int main() {
    char x;
    char y;
    int n, m, i, j;
    char result = "";
   
    while (scanf("%d%d", &n, &m) != EOF) {
      getchar();// 处理输入缓冲区中的换行符
      
      for (i = 0; i < n; i++) {
            fgets(x, MAX_SIZE, stdin);
            strtok(x, "\n");// 去掉末尾的换行符
      }
      
      for (i = 0; i < m; i++) {
            fgets(y, MAX_SIZE, stdin);
            strtok(y, "\n");// 去掉末尾的换行符
      }
      
      for (i = 0; i < n; i++) {
            for (j = 0; j < m; j++) {
                if (strcmp(x, y) == 0) {
                  if (strcmp(result, x) < 0 || strlen(result) == 0) {
                        strncpy(result, x, MAX_SIZE);
                  }
                }
            }
      }
      
      if (strcmp(result, "") == 0) {
            puts("sad!");
      } else {
            puts(result);
      }
    }
   
    return 0;
}

希望这可以满足您的需求!如果有任何问题,请随时向我提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 输出不对