使用包含的库,如何从存储在数组中的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/

10-11 15:53