首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的程序运行,但我收到一些警告,告诉我格式%d不能去那里

我的程序运行,但我收到一些警告,告诉我格式%d不能去那里
EN

Stack Overflow用户
提问于 2020-11-13 09:19:22
回答 3查看 58关注 0票数 0

我必须做一个程序,要求我输入不同的值,然后它必须打印在屏幕上。然后,它问我,“你想要改变的向量的值是多少?”我必须输入这个值的数目,而不是它本身的值。

当我运行该程序时,会收到以下几个警告:

“警告:格式'%d‘期望'int’类型的参数,但参数6的类型为'int *‘-Wformat=”

我不知道如何解决这个问题,我试过使用%p,但没有帮助。有什么想法吗?

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

#define MAX 5

int main()
{
    int intero = 0;
    int *p_int;

    int vettore[MAX] = {0};
    int *p_vet;
    int num = 0;
    int val = 0;

    char carattere = 0;
    char *p_car;

    p_int = &intero;
    p_car = &carattere;
    p_vet = vettore;

    printf("Enter an integer: ");
    scanf ("%d", &intero);
    fflush (stdin);

    printf ("\nEnter a character: ");
    scanf("%c", &carattere);
    fflush (stdin);

    for (int i=0; i<MAX; i++)
    {
        printf("\nEnter integer n^%d of the vector: ", i);
        scanf("%d", &vettore[i]);
        fflush (stdin);
    }

    printf("\n\n\n");

    printf("Type\t\tDirect Value\t\tValue by Pointer\tDirect Position\tPosition by Pointer\n");
    printf("__________________________________________________________________________________________________________________\n\n");
    printf("Integer:\t\t%d\t\t\t%d\t\t\t\t%d\t\t\t\t%d\n\n", intero, *p_int, &intero, p_int);
    printf("Character:\t%c\t\t\t%c\t\t\t\t%d\t\t\t\t%d\n\n", carattere, *p_car, &carattere, p_car);

    for (int i=0; i<MAX; i++)
    {
        printf("Integer n^%d:\t%d\t\t\t%d\t\t\t\t%d\t\t\t\t%d\n\n", i, vettore[i], *p_vet, &vettore[i], p_vet);
        p_vet++;
    }

    p_vet = vettore;

    printf("\nEnter which value of the vector you want to change: ");
    scanf("%d", &num);
    fflush(stdin);

    printf("\nEnter now the value you want: ");
    scanf("%d", &val);
    fflush(stdin);

    *(p_vet + num) = val;
    printf("\n\n");

    for (int i=0; i<MAX; i++)
    {
        printf("Integer n^%d:\t%d\t\t\t%d\t\t\t\t%d\t\t\t\t%d\n\n", i, vettore[i], *p_vet, &vettore[i], p_vet);
        p_vet++;
    }

    return 0;
}
EN

Stack Overflow用户

回答已采纳

发布于 2020-11-13 09:30:53

通过使用%p格式说明符,您可以告诉printf您要打印的值实际上是一个内存地址,而不是指针指向的值。每当您使用指针而不使用*操作数取消引用时,您只需打印它所指向的内存偏移量,而不是将其格式化为整数。在我看来,有时候你就是这么做的,就像这里:printf("Integer:\t\t%d\t\t\t%d\t\t\t\t%d\t\t\t\t%d\n\n", intero, *p_int, &intero, p_int);

因为p_int是一个指针,而且您使用%d作为格式说明符,所以它会抛出这样的错误。使用*p_int去引用它是正确的,我认为,除非您的意图实际上是打印内存偏移量,在这种情况下,您应该使用%p并转换指向(void*)的指针。

票数 3
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64818313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档