列表之间的相等性以及列表中 char 到 int 的转换

equality between lists and conversion of char into int within a list

提问人:David feoerwg 提问时间:11/2/2022 最后编辑:Ken WhiteDavid feoerwg 更新时间:11/2/2022 访问量:96

问:

// Igualdade entre listas --> Teste 1 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define BTT 10 


void create_pirolito(int list[BTT]);
void create_retardado(int list[BTT]);
void compare_lists(int list1[BTT], int list2[BTT]);
void prints_both(int list1[BTT], int list2[BTT]);



void create_pirolito(int list[BTT])
{
    for(int i=0; i<BTT; i++)
    {
        list[i]=rand()%10;
    }
}



void create_retardado(int list[BTT])
{
    for(int i=0; i<BTT; i++)
    {
         list[i]=rand()%20;
    }
}



void prints_both(int list1[BTT], int list2[BTT])
{
    int i=0;
    int j=0;
    for(int z=0; z<BTT; z++)
    {
      printf("(%2d  %2d)\n", list1[i], list2[j]);
      i++;
      j++;
    }
}



void compare_lists(int list1[BTT], int list2[BTT])
{
    char x='X';
    for(int i=0; i<BTT; i++)
    {
        for(int j=0; j<BTT; j++)
        {
            if(list1[i]==list2[j])
            {
                list1[i]==(int)(x);
            }
        }
        printf("\n");
    }
}




int main()
{
    int pirolito[BTT];
    int retardado[BTT];
    
    create_pirolito(pirolito);
    create_retardado(retardado);
    compare_lists(pirolito, retardado);
    prints_both(pirolito, retardado);
    
    return 0;
}

我的目的是比较两个不同的列表,每当存在相等时,该索引中保存的数字就会被交换为字母“X”,这仅在 pirolito 列表中,但是当我编译时没有错误,只有很大的空格,然后按照两个列表的打印,但在各自的等式中没有字符“X”。

C 列表 相等 转换器

评论

0赞 alex01011 11/2/2022
大空间来自.compare_listsprintf("\n")
0赞 William Pursell 11/2/2022
声明然后在使用它时将其转换为似乎有点奇怪。 是一个 int,避免投射并直接做似乎更干净。没什么大不了的,但记住这是一个很方便,因为做这样的事情是一个常见的错误(返回一个 int,并将其分配给一个 char 使得无法区分 EOF 和有效数据)。最好把它烧到你的大脑里,这是一个.(请注意,这在 C++ 中是不同的)char xint'X'int x = 'X';'X'intchar c = getchar()getchar'X'int
0赞 Community 11/3/2022
请澄清您的具体问题或提供其他详细信息以准确说明您的需求。正如目前所写的那样,很难确切地说出你在问什么。

答:

1赞 Alex P 11/2/2022 #1

首先,数据类型只是一个单字节整数。ASCII 字符“X”由十进制 88 表示。它不是“一个字符”,只是对底层二进制值的不同解释(如果您不熟悉,可以考虑十进制)。char

在 中,当找到相等时,您只需在该位置为列表赋值 88。打印列表时,用作打印格式,这意味着该值打印为整数。如果使用 ,值 88 将打印为 ASCII 字符“X”,列表中的所有其他值将打印为 ASCII 字符(尽管不是您可能认为的那些)。compare_lists%d%c

如果不对列表中的允许值施加一些限制,就无法执行所需的操作,原因很简单,88 可以在调用之前存在于列表中,也可以在调用期间写入。compare_lists

如果您坚持使用当前的方法,则需要将列表的值限制为包含某些选定的数字。例如,武断地说这不是列表中的合法值。然后,在 中,你写任何满足条件的地方,在你的 你需要检查是否等于 ,在这种情况下,你可以使用 ,否则使用你的旧语句-3compare_lists-3prints_bothlist1[i]-3printf("(X %2d)\n", list2[i])printf