【问题标题】:Why positive values turns negative为什么正值变成负值
【发布时间】:2020-12-31 01:11:06
【问题描述】:

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

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

例如: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);

}

【问题讨论】:

  • fprintf(fp, "Codigo funcionario: %d \n", codigo1); 您应该在这一行收到编译器警告。不要忽视它,因为它会准确地告诉你哪里出了问题。

标签: c


【解决方案1】:

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

在此声明中:

scanf("%d", codigo1);

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

但是这个说法:

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

codigo1 的地址压入堆栈,并使用%d 格式说明符将其解释为整数。此外,sizeof(&amp;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);

【讨论】:

  • 如果您发现此答案有帮助,请不要忘记投票和/或接受它。
  • 2分钟,我会的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
  • 2014-12-24
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
相关资源
最近更新 更多