canf输入float数组时的问题
如果只是为了传输方便,直接内存复制就行吧。
#include#include#includevoid main(){ float a= 1254.42f; char b[4]; float c; memcpy(b, &a, sizeof(a)); //传输过程 //接收,再转换 memcpy(&c, b, sizeof( b)); printf("%f
", c);}
我已运行成功。你能赏赐几分吗?祝你成功!
#include
using namespace std;
//函数模板
template
void sort(T a[],int n)
{
T temp;
bool exchange;
for(int i = 1; i < n; i++)
{
exchange = false;
for(int j = n-1; j >= i; j--)
if(a[j] < a[j-1])
{
temp = a[j]; a[j] = a[j-1]; a[j-1] = temp;
exchange = true;
}
if(!exchange)
return;
}
}
void main()
{
int a_int[10] = {9,8,7,6,5,4,3,2,1,0};
float a_float[10] = {(float)9.9,(float)8.8,(float)7.7,(float)6.6,(float)5.5,\
(float)4.4,(float)3.3,(float)2.2,(float)1.1,(float)0};
double a_double[10] = {9.99,8.88,7.77,6.66,5.55,4.44,3.33,2.22,1.11,0};
cout<<"int型数组排序前为:"<<endl;
for(int i = 0; i < 10; i++)
cout<<a_int[i]<<" ";
cout<<endl;
sort(a_int,10);
cout<<"int型数组排序后为:"<<endl;
for(i = 0; i < 10; i++)
cout<<a_int[i]<<" ";
cout<<endl<<endl;
cout<<"float型数组排序前为:"<<endl;
for(i = 0; i < 10; i++)
cout<<a_float[i]<<" ";
cout<<endl;
sort(a_float,10);
cout<<"float型数组排序后为:"<<endl;
for(i = 0; i < 10; i++)
cout<<a_float[i]<<" ";
cout<<endl<<endl;
cout<<"double型数组排序前为:"<<endl;
for(i = 0; i < 10; i++)
cout<<a_double[i]<<" ";
cout<<endl;
sort(a_double,10);
cout<<"double型数组排序后为:"<<endl;
for(i = 0; i < 10; i++)
cout<<a_double[i]<<" ";
cout<<endl<<endl;
}
计算机并不是完全正确的,这涉及到精度问题和计算机原理,如果要更精确就需要更多的位来存储,比如用double型,这样精度更高
可以设置输出的小数点位数,printf("%.1f")输出的跟你输入的就一样了
堵乐奥扎: 这要看你输入什么样的东西了,如果本来就是整数没有小数点,那就会直接输进去,如果有小数点那就会输入小数点之前的东西,小数点留着,然后如果下一次输入的不是可以带小数点的东西(比如%s,%f,%c...)嘛...就炸了
开封县15522845027: scanf输入float数组时 - ?
堵乐奥扎: 因该调试不通过吧,float a[i] 这里已经发生错误 结果一定一样的,,,显示的时候 可能精确度会更高而已
开封县15522845027: C语言 用float 定义数组的问题 - ?
堵乐奥扎: 这个不是float类型定义的问题,而是类型转换问题,你定义a数组为float类型,而输出格式%d是整形,只要你把输出格式改为 %f 就可以了,或者直接将a[1]强制转换为整形,只取整数部分进行输出: 即,你的代码应该改为如下:#include <stdio.h>int main() {float a[10] = {1.1, 2.2, 3.3};printf("%f %d\n", a[1], (int)(a[1]));/**按照浮点型输出,或者强制转换为整形取整数部分输出**/return 0;}
开封县15522845027: C语言中,通过scanf输入数组元素的问题 - ?
堵乐奥扎: 没有什么问题,和分开输入是一样的. 没什么区别.但是 int array[][2]; 这种定义是非法的.如果第一维留空,那么必须有初始化值,让系统用来自动确定数组的规模.
开封县15522845027: c程序设计求数组float=a[10],从键盘输入数据,求最大值和最小值以及下标.哪里错了呀?? - ?
堵乐奥扎: scanf("%f",数组的下标是从0-9,10就越界了
开封县15522845027: c语言 float类型数据输入 出错处理?
堵乐奥扎: 定义一个整形在scanf前面接受返回值! int temp=scanf("%f",&a); if(temp==0){printf("输入有误!");fflush(stdin);//清空缓冲内存区! }
开封县15522845027: c语言输入为int,输出为%f和输入为float,输出为%d各有什么后果? - ?
堵乐奥扎: 看你声明的变量类型是什么. 如果声明的变量是int类型,则用scanf输入和用printf输出时,都要使用%d格式. 如果声明的变量是float类型,则在用scanf输入和printf输出时,都要使用%f格式. 否则,有一个把格式用错,输出的都是乱码. 有什么问题请留言.
开封县15522845027: scanf函数后面不可以加一个float型的数组吗?为什么??
堵乐奥扎: 数组下标从0开始,2个数组元素只有0、1连个下标,2就越界了.另外你的scanf("%f,&a[2][2);}%f后面缺少一个引号.程序本身没有问题,怎么运行不了呢?详细说一下.
开封县15522845027: c语言.若变量已正确定义为float型,要通过输入语句:scanf("%f %f %f",&a,&b,&c); - ?
堵乐奥扎: 改成 scanf("%f,%f,%f",&a,&b,&c);键盘键入格式应该是:11.0,22.0,33.0
开封县15522845027: 在定义时用float格式定义i,用scanf输入时 scanf("%d",&i) 其中格式换成了 int型 会不会出错 - ?
堵乐奥扎: 会出错的 而且你会发现错的很离谱.当你用%d 传入一个float*指针 也就是你的&i时,会在i所占的四个字节上,写一个int值,也就是一个32位的二进制值.除非你在输出的时候用 printf("%d",*((int*)&i)); 否则 如果你用 printf("%f\n", i); 这样输出的会是输入的二进制值,按照浮点数存储规则 计算出来的值.与你输入的值偏差是超级大的