爱学习的鲲崑 发表于 2023-8-6 22:18:30

请问这是怎么回事

在小甲鱼带你学c系列课程中复制第一节课作业的代码出现以下乱码是什么情况?

学习编程中的Ben 发表于 2023-8-6 22:18:48

在C/C++代码中出现乱码可能有多种原因。以下是一些常见的原因和解决方法:

1. 文件编码问题:代码文件的编码格式不正确可能导致乱码。确保代码文件使用的是正确的编码格式,如UTF-8或GBK等。

2. 编译器设置问题:编译器可能默认使用了错误的字符集,导致代码无法正确解析。可以尝试修改编译器的字符集设置,确保与代码文件的编码格式一致。

3. 控制台输出问题:某些控制台环境可能不支持显示某些字符,导致乱码。可以尝试修改控制台的字符集设置,或使用其他控制台工具进行测试。

4. 特殊字符处理问题:代码中包含特殊字符(如非ASCII字符)可能会导致乱码。确保代码中使用的特殊字符与编码格式相匹配,并尽量避免使用不必要的特殊字符。

这些是一些常见的乱码解决方法,具体原因可能因环境和代码而异。如果你能提供更多的上下文信息和代码示例,我可以更准确地帮助你找到问题并提供相应的解决方案。

为了更好地辅助你,可以请提供出现乱码的代码片段,以便我对其进行分析和修改。谢谢!

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}

Mike_python小 发表于 2023-8-6 22:18:54

在C/C++中,代码中出现乱码可能是因为编码不匹配或者字符集设置问题。以下是一些可能导致乱码的原因和解决方法:

1. 文件编码问题:确保源代码文件使用正确的编码格式保存。C/C++源代码通常使用UTF-8编码进行保存。

2. 控制台字符集设置问题:在Windows系统中,控制台的字符集可能与源代码文件的字符集不匹配,导致输出结果显示乱码。可以尝试修改控制台的字符集设置为UTF-8。在命令行中执行以下命令可以更改字符集:
   
   chcp 65001
   
   这将把控制台字符集设置为UTF-8。

3. IDE或文本编辑器字符集设置问题:如果你在使用某个集成开发环境(IDE)或文本编辑器编写代码,确保它的字符集设置与源代码文件的字符集一致。在IDE或文本编辑器的设置中查找字符集选项,并将其设置为UTF-8。

4. 特殊字符转义问题:在代码中如果有包含特殊字符如Unicode字符或转义序列,可能会导致乱码。请确保特殊字符被正确转义,以避免乱码问题。

5. 字体设置问题:有时,乱码可能是由于显示代码的编辑器或终端使用了不支持所需字符集的字体。尝试更改字体设置,使用支持UTF-8字符集的字体。

根据你的描述,乱码是在复制第一节课作业的代码时出现的,有可能是源代码文件的编码格式与你的编辑器或系统默认编码不匹配所导致的。你可以尝试按照上述方法进行调整和测试,以解决乱码问题。

希望这些解决方法能帮助你解决问题!如果你有任何进一步的疑问,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

歌者文明清理员 发表于 2023-8-6 22:19:24

编码错了,在main()里第一行加上 system("chcp 65001");

爱学习的鲲崑 发表于 2023-8-6 22:27:06

歌者文明清理员 发表于 2023-8-6 22:19
编码错了,在main()里第一行加上 system("chcp 65001");

谢谢,但是又报错,在93行printf("计算中...\n");,显示[{
        "resource": "/C:/Users/21258/Desktop/测试/作业1改.c",
        "owner": "C/C++: IntelliSense",
        "code": "165",
        "severity": 8,
        "message": "函数调用中的参数太少",
        "source": "C/C++",
        "startLineNumber": 93,
        "startColumn": 26,
        "endLineNumber": 93,
        "endColumn": 27
}]

sfqxx 发表于 2023-8-6 22:27:58

你代码不放上来谁会给你解答?

爱学习的鲲崑 发表于 2023-8-6 22:30:10

sfqxx 发表于 2023-8-6 22:27
你代码不放上来谁会给你解答?

#include <io.h>
#include <direct.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX      256

long total;

int countLines(const char *filename);
void findAllCodes(const char *path);
void findALLFiles(const char *path);

int countLines(const char *filename)
{
      FILE *fp;
      int count = 0;
      int temp;
      
      if ((fp = fopen(filename, "r")) == NULL)
      {
                fprintf(stderr, "Can not open the file:%s\n", filename);
                return 0;
      }
      
      while ((temp = fgetc(fp)) != EOF)
      {
                if (temp == '\n')
                {
                        count++;
                }
      }
      
      fclose(fp);
      
      return count;
}

void findAllCodes(const char *path)
{
      struct _finddata_t fa;
      long handle;
      char thePath, target;
      
      strcpy(thePath, path);
      if((handle = _findfirst(strcat(thePath, "/*.c"), &fa)) != -1L)
      {
                do
                {
                        sprintf(target, "%s/%s", path, fa.name);
                        total += countLines(target);
                }while (_findnext(handle, &fa) == 0);
      }
   
      _findclose(handle);
}

void findALLDirs(const char *path)
{
      struct _finddata_t fa;
      long handle;
      char thePath;
      
      strcpy(thePath, path);
      if((handle = _findfirst(strcat(thePath, "/*"), &fa)) == -1L)
      {
                fprintf(stderr, "The path %s is wrong!\n",path);
                return;
      }
   
      do
      {      
                if (!strcmp(fa.name, ".") || !strcmp(fa.name, ".."))
                        continue;
                  
                if( fa.attrib == _A_SUBDIR)
                {      
                        sprintf(thePath, "%s/%s", path, fa.name);
                        findAllCodes(thePath);
                        findALLDirs(thePath);
                }
      }while (_findnext(handle, &fa) == 0);
   
      _findclose(handle);   
}

int main()
{       system("chcp 65001");
      char path = ".";
      
      printf("计算中...\n");
      
      findAllCodes(path);
      findALLDirs(path);
      
      printf("目前你总共写了 %ld 行代码!\n\n", total);
      system("pause");
      
      return 0;
}
抱歉,刚学习有些不懂

巅峰老甲鱼1 发表于 2023-8-7 11:17:54

请参看此链接

jackz007 发表于 2023-8-7 17:37:58

本帖最后由 jackz007 于 2023-8-7 17:40 编辑

      用 Windows 记事本(操作系统自带)打开这个文件,点击界面上的 "文件 > 另存为",在"保存"按钮的左边有 "编码" 栏,通过下拉菜单选择设定为 "ANSI",点击 "保存" 按钮,然后再编译,再运行程序看看,有没有乱码了。
      乱码是因程序中有中文字符输出造成,所有代码中带有中文字符输出的程序,都应该用这个方法进行转存。

额外减小 发表于 2023-8-7 23:04:02

爱学习的鲲崑 发表于 2023-8-6 22:27
谢谢,但是又报错,在93行printf("计算中...\n");,显示[{
        "resource": "/C:/Users/21258/Desktop/测试 ...

建议用devc++,个人感觉更好用,适合初学者
页: [1]
查看完整版本: 请问这是怎么回事