我有一个在四元数.c 中定义的结构
typedef struct quaternion{
double arr[4];
} quaternion;
带有头文件
#ifndef QUATERNIONS_H
#define QUATERNIONS_H
typedef struct quaternion{
double arr[4];
} quaternion;
#endif
由于这是我第一次使用C结构,所以我尝试对其进行测试。
#include <stdio.h>
#include "quaternions.h"
int main(){
quaternion a;
a.arr[1]=2.5;
printf("%dn",a.arr[1]);
return 0;
}
据我所知,我所做的和这篇文章几乎一模一样。然而,当我编译并运行它时,它会打印一个随机的胡言乱语数字。我做错了什么?
double
的正确printf
转换格式说明符是%f
,而不是%d
。有关详细信息,请参阅该功能的文档。
你应该更改线路
printf("%dn",a.arr[1]);
至:
printf("%fn",a.arr[1]);
通过使用错误的转换格式说明符,您的程序正在调用未定义的行为。这解释了为什么您的程序正在打印";随机胡言乱语";而不是期望的输出。
如果使用了错误的转换格式说明符,大多数优秀的编译器都会发出警告。如果编译器没有警告您,那么我建议您确保已启用所有警告。有关更多信息,请参阅此问题:
为什么我应该始终启用编译器警告?