首页 > 解决方案 > 为什么正值变成负值

问题描述

我正在将一些测试写入文件。

每个单值数值无缘无故变成负数,我不会那样做。

我举了例如: codigo : 1 并且它总是显示数字 -13312 ,或者 codigo : 2 并且输出是: -13312

我该如何解决?

#include <stdio.h>

int main() {

 int codigo1[100];
 int numero_telefone[100];
 int numero_dependentes[100];
 char nome[100];
 char estado_civil[100];

 FILE *fp;

 if ((fp = fopen("nomes.txt", "a")) != NULL) {

    printf("Indique o seu codigo de funcionario [0-100]: ");
    scanf("%d", codigo1);
    fprintf(fp, "Codigo funcionario: %d \n", codigo1);

    printf("Inroduduza o seu nome: ");
    scanf(" %s", nome);
    fprintf(fp, "Nome: %s \n", nome);

    printf("Insira o seu numero de telefone: ");
    scanf("%d", &numero_telefone);
    fprintf(fp, "Numero de telefone: %d \n", numero_telefone);

    printf("Indique o seu estado civil: ");
    scanf(" %s", &estado_civil);
    fprintf(fp, "Estado civil: %s \n", estado_civil);

    printf("Indique o numero de dependentes: ");
    scanf("%d", &numero_dependentes);
    fprintf(fp, "Numero dependentes: %d \n", numero_dependentes);

}
fclose(fp);

}

标签: c

解决方案


codigo定义为 100 个整数的数组。这意味着它在传递给另一个函数时本质上是一个指针。

在本声明中:

scanf("%d", codigo1);

codigo1[0]被输入的整数填充。该数组中的其他 99 个值未定义。但是 codigo1[0] 分配正确。

但是这个声明:

fprintf(fp, "Codigo funcionario: %d \n", codigo1);

将 的地址压codigo1入堆栈,%d格式说明符用于将其解释为整数。sizeof(&int) != sizeof(int)此外,如果在 64 位平台上通常会出现堆栈对齐问题。这可能会导致使用多个格式说明符和相应参数的 printf 语句出现问题。

简单的解决方法是将要写入文件的特定整数值传递给:

fprintf(fp, "Codigo funcionario: %d \n", codigo1[0]);

您的其他陈述也需要类似的处理。您还应该考虑是否真的需要使用数组。以下也同样有效:

int codigo1 = 0;
...
scanf("%d", &codigo1); // &codigo1 is the "address of" codigo1
fprintf(fp, "Codigo funcionario: %d \n", codigo1);

推荐阅读