c - 为什么正值变成负值
问题描述
我正在将一些测试写入文件。
每个单值数值无缘无故变成负数,我不会那样做。
我举了例如: 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);
}
解决方案
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);
推荐阅读
- timer - esp32 更高的定时器频率和更低的时钟分频器
- java - 在 Android Java 中通过扩展类来定义新类时如何更改类字段类型和布局?
- haskell - 在字符串列表上使用函数
- python - 从需要使用请求登录的网站下载pdf文件,python3
- android - Android studio 设置,ctrl+alt+l 不能正常工作
- react-native - React-native 在创建新项目时给出'native'不被识别为内部或外部命令
- php - 如何使用 PHP 获取 YT 视频的观看次数?
- java - Gradle 项目同步失败。基本功能将无法正常工作。(安卓工作室)
- angular -
切换选项卡时如何在 nebular nb-tab 中调用用户定义的函数 - python - 递归深度和一个事实?