注册 登录
编程论坛 C语言论坛

关于注释问题

奇数层 发布于 2022-09-25 10:32, 1583 次点击
只有本站会员才能查看附件,请 登录

为什么一添加注释就报警告?
怎么解决呢?
9 回复
#2
rjsp2022-09-25 13:20
把注释删光,然后看看编译能通过不?
将注释用“手打”一个一个字符的敲上去,看看编译能通过不?
如果能编译通过,说明你拷贝的注释里面含有 GB2312 之外的编码;如果依然不能编译通过,把你的xx.c以文件形式发上来让大家看看。
#3
奇数层2022-09-25 22:30
回复 2楼 rjsp
注释删光可以通过没警告
#4
奇数层2022-09-25 22:30
回复 2楼 rjsp
struct stu
{
    char name[30];
    int rank;
};

int comp_int(const void* e1, const void* e2)
{
    return *(int*)e1 - *(int*)e2;
}

int comp_float(const void*e1, const void*e2)
{
   
    if (*(float*)e1 == *(float*)e2)
        return 0;
    else if (*(float*)e1 > *(float*)e2)
        return 1;
    else
        return -1;
}

int comp_struct_by_rank(const void*e1, const void*e2)
{
    return ((struct stu*)e1)->rank - ((struct stu*)e2)->rank;
}

int comp_struct_by_name(const void*e1, const void*e2)
{
    return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}


void exchange(char*e1, char* e2,int width)
{
    char tem;
    for (int i = 0; i < width; i++)
    {
        tem = *e1;
        *e1 = *e2;
        *e2 = tem;
        e1++;
        e2++;
    }
   
}

void bubble(void* arr, int num, int width,int(*comp)(const void*e1,const void*e2))
{
    int i = 0;
    int j = 0;
   
    for(i = 0; i < num - 1; i++)
    {
        
        for (j = 0; j < num - 1 - i; j++)
        {
            if (comp(      (char*)arr + (width * j), (char*)arr + (width * (j + 1))       ) > 0)
            {
               
                exchange((char*)arr + width * j, (char*)arr + width * (j + 1), width);
            }

        }
    }
}





void text1_int()
{
    int arr[10] = { 2,6,4,8,7,9,5,1,3,0 };
    int num = sizeof(arr) / sizeof(arr[0]);
    qsort(arr, num, sizeof(arr[0]), comp_int);
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
}

void text2_float()
{
    float arr1[10] = { 2.6f,6.3f,4.5f,8.4f,7.9f,9.5f,5.3f,1.4f,3.7f,0.8f };
    int num = sizeof(arr1) / sizeof(arr1[0]);
    qsort(arr1, num,sizeof(arr1[0]), comp_float);
    for (int i = 0; i < 10; i++)
    {
        printf("%f ", arr1[i]);
    }
}

void text3_struct_rank()
{
    struct stu arr3[6] = { {"һ",6} ,{"һһ",4},{"һһһ",3}, {"һһһһ",7},{"һһһһһ",5} ,{"һһһһһһ",8} };
    int num = sizeof(arr3) / sizeof(arr3[0]);
    qsort(arr3, num, sizeof(arr3[0]), comp_struct_by_rank);
    for (int i = 0; i < 6; i++)
    {
        printf("%d ", arr3[i].rank);
    }
}

void text4_struct_name()
{
    struct stu arr3[6] = { {"asd",6} ,{"fgh",4},{"jkl",3}, {"zxc",7},{"vbn",5} ,{"qwe",8} };
    int num = sizeof(arr3) / sizeof(arr3[0]);
    qsort(arr3, num, sizeof(arr3[0]), comp_struct_by_name);
    for (int i = 0; i < 6; i++)
    {
        printf("%s ", arr3[i].name);
    }
   

}

void text5_bubble_int()
{
    int arr[10] = { 2,6,4,8,7,9,5,1,3,0 };
    int num = sizeof(arr) / sizeof(arr[0]);
    bubble(arr, num, sizeof(arr[0]), comp_int);
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
}



int main()
{
   
    text1_int();
    printf("\n");
    text2_float();
    printf("\n");
    text3_struct_rank();
    printf("\n");
    text4_struct_name();
    printf("\n");

    text5_bubble_int();
    /*bubble*/
   
   
    return 0;
}
#5
rjsp2022-09-26 10:52
回复 4楼 奇数层
我说的是“把你的xx.c以文件形式发上来”,不是让你把xx.c的内容贴上来。你拷贝粘贴文件内容时就可能把不合格的字符给滤掉了。

从你贴的内容来看,比如 "һ" 中的 'һ'(对应unicode编码\u04BB) 就不是一个 GB2312 能表达的字符,我猜你想写的应该是 "h"(GB2312编码 0x68)

我帮你把代码中的错误改掉了一些
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct stu
{
    char name[30];
    int rank;
};

int comp_int(const void* e1, const void* e2)
{
    //return *(int*)e1 - *(int*)e2; 错误:可能会溢出
    if( *(int*)e1 < *(int*)e2 ) return -1;
    if( *(int*)e1 > *(int*)e2 ) return +1;
    return 0;
}

int comp_float(const void* e1, const void* e2)
{
    // 错误:非规格化数,既不小于,也不大于,更不等于
   
//if (*(float*)e1 == *(float*)e2)
   
//    return 0;
   
//else if (*(float*)e1 > *(float*)e2)
   
//    return 1;
   
//else
   
//    return -1;
    if( *(float*)e1 < *(float*)e2 ) return -1;
    if( *(float*)e1 > *(float*)e2 ) return +1;
    return 0;
}

int comp_struct_by_rank(const void* e1, const void* e2)
{
    // return ((struct stu*)e1)->rank - ((struct stu*)e2)->rank; 错误:可能会溢出
    return comp_int( &(*(struct stu*)e1).rank, &(*(struct stu*)e2).rank );
}

int comp_struct_by_name(const void* e1, const void* e2)
{
    return strcmp( ((struct stu*)e1)->name, ((struct stu*)e2)->name );
}

void exchange( char* e1, char* e2, size_t width ) // size_t
{
    for( size_t i=0; i!=width; ++i )
    {
        char temp = e1[i];
        e1[i] = e2[i];
        e2[i] = temp;
    }
}

void bubble( void* arr, size_t num, size_t width, int (*comp)(const void* e1,const void* e2) ) // size_t
{
    for( size_t i=0; i+1<num; ++i )
    {
        for( size_t j=0; j+1+i<num; ++j )
        {
            if( comp( (char*)arr + j*width, (char*)arr + (j+1)*width ) > 0 )
            {
                exchange( (char*)arr + j*width, (char*)arr + (j+1)*width, width );
            }
        }
    }
}

void text1_int( void )
{
    int arr[10] = { 2,6,4,8,7,9,5,1,3,0 };
    size_t num = sizeof(arr) / sizeof(arr[0]);
    qsort( arr, num, sizeof(arr[0]), comp_int );
    for( size_t i=0; i!=num; ++i )
        printf( "%d%c", arr[i], " \n"[i+1==num] );
}

void text2_float( void )
{
    float arr[10] = { 2.6f,6.3f,4.5f,8.4f,7.9f,9.5f,5.3f,1.4f,3.7f,0.8f };
    size_t num = sizeof(arr) / sizeof(arr[0]);
    qsort( arr, num, sizeof(arr[0]), comp_float );
    for( size_t i=0; i!=num; ++i )
        printf( "%f%c", arr[i], " \n"[i+1==num] );
}

void text3_struct_rank( void )
{
    struct stu arr[6] = { {"h",6} ,{"hh",4},{"hhh",3}, {"hhhh",7},{"hhhhh",5} ,{"hhhhhh",8} };
    size_t num = sizeof(arr) / sizeof(arr[0]);
    qsort( arr, num, sizeof(arr[0]), comp_struct_by_rank );
    for( size_t i=0; i!=num; ++i )
        printf( "%d%c", arr[i].rank, " \n"[i+1==num] );
}

void text4_struct_name( void )
{
    struct stu arr[6] = { {"asd",6} ,{"fgh",4},{"jkl",3}, {"zxc",7},{"vbn",5} ,{"qwe",8} };
    size_t num = sizeof(arr) / sizeof(arr[0]);
    qsort( arr, num, sizeof(arr[0]), comp_struct_by_name );
    for( size_t i=0; i!=num; ++i )
        printf("%s%c", arr[i].name, " \n"[i+1==num] );
}

void text5_bubble_int( void )
{
    int arr[10] = { 2,6,4,8,7,9,5,1,3,0 };
    size_t num = sizeof(arr) / sizeof(arr[0]);
    bubble( arr, num, sizeof(arr[0]), comp_int );
    for( size_t i=0; i!=num; ++i )
        printf( "%d%c", arr[i], " \n"[i+1==num] );
}

int main( void )
{
    text1_int();
    text2_float();
    text3_struct_rank();
    text4_struct_name();
    text5_bubble_int();
    /*bubble*/
}


[此贴子已经被作者于2022-9-26 11:11编辑过]

#6
奇数层2022-09-26 19:39
回复 5楼 rjsp
只有本站会员才能查看附件,请 登录

呃呃,你帮我改的内容,我还暂时看不懂。。。。,不知道原因
#7
rjsp2022-09-27 07:49
回复 6楼 奇数层
你的
    text5_bubble_int();
    /*bubble*/
没有问题。

有问题的还是我之前说过的
struct stu arr3[6] = { {"һ",6} ,{"һһ",4},{"һһһ",3}, {"һһһһ",7},{"һһһһһ",5} ,{"һһһһһһ",8} };
里面的 һ 不是 h
#8
rjsp2022-09-27 08:12
以二进制方式打开你的 xx.c,里面有两个字节 --- D2 BB,它对应的字符是 utf8编码的'һ',没有GB2312对应的编码。
而 /*bubble*/ 是没问题的。

只有本站会员才能查看附件,请 登录
#9
mature1192022-09-27 21:40
注释不会有问题,应该是附近有语法错误吧。
#10
奇数层2022-09-27 22:26
回复 8楼 rjsp
也就是这里的h不符合GB2312的存储方式?
之前这里我写的是一,一一,一一一等等,然后第二天编译了一下就变成h了。
1