使用包含的库,如何从存储在数组中的fget的输入中分离出包含名称,年龄和比率的字符串?
我需要修改字符串,年龄并设置速率以显示3个小数位。之后,我需要将这些变量的新结果存储在单个char数组中。这是我到目前为止所拥有的。我不知道是什么导致sscanf()给我意外的结果或如何解决它
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#define SIZE 10
#define SIZE2 40
int main(){
char input[SIZE2]={};
char name[SIZE]={};
int age = 0;
float rate = 0;
printf("Enter name, age and rate (exit to quit): ");
fgets(input, SIZE2, stdin);
sscanf(input,"%s %d %f", name, &age, &rate);
printf("%s %d %.3f",name, &age, &rate);
return 0;
}
名称显示正确,但是年龄是一个随机的大数字,比率显示为0.000
最佳答案
在printf(“%s%d%.3f”,name,&age,&rate)中删除运算符(&)的地址;喜欢
printf(“%s%d%.3f”,名称,年龄,费率);
当将&运算符放入printf()时,它将打印变量的地址
但是为什么scanf()需要&运算符?
让我们看一个例子:
int main()
{
int *ad,var;
ad=&var;
*ad=10;
printf("%d",var);
return 0;
}
它将打印10
让我们来看另一个带有函数的示例:
void sum(int *sum,int a,int b)
int main()
{
int a=10,b=10,c;
sum(&c,a,b);
printf("%d",c);
return 0;
}
void sum(int *sum,int a,int b)
{
*sum=a+b;
}
它将打印20
因此,如果要在函数中修改变量,则可以通过引用传递变量
因此,scanf()需要&的运算符才能获取变量的地址
关于c - sscanf(str1,“%s%d%f”,str2,#,&float1)产生意外结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58211580/