#include <stdio.h>
#define MAX_SIZE 20
int main()
{
int age;
char name[MAX_SIZE];
float wage;
printf("input name, age and wage: ");
scanf("%s %s %s", name, &age, &wage); //LINE 10
}
尝试编译后:
lab4q5.c: In function 'main':
lab4q5.c:10: warning: format '%s' expects type 'char *', but argument 3 has type 'int*'
lab4q5.c:10: warning: format '%s' expects type 'char *', but argument 4 has type 'float *'
lab4q5.c:16: warning: control reaches end of non-void function
我是C编程的新手,想要扫描一个float
和int
,但是作为我的一个实验室的字符串。我知道我可以将%s %s
更改为%f %d
并且它应该编译正常,但我被要求扫描是否%s
,任何帮助将不胜感激:
我遇到问题的部分问题如下:
使用循环读取输入(来自标准输入),每行一个输入,大约 名称年龄工资形式的用户信息,其中年龄为 整数字面值,而工资是浮点字面值,最多为2 十进制数。 •使用scanf(“%s%s%s”,姓名,年龄,工资)来读入 三个输入'字符串';
所以在阅读完评论后我决定将它们格式化为字符串,然后担心将它们作为int和float进行操作,这是我到目前为止所做的:
#include <stdio.h>
#define MAX_SIZE 20
#define MAX_AGE 3
int isXX(char name[])
{
if (name[0] == 'X' && name[1] == 'X' && name[2] == '\0')
return 0; //return return false to quit
else
return 1; //return true
}
int main()
{
char age[MAX_AGE];
char wage[MAX_SIZE];
char name[MAX_SIZE];
printf("input name, age and wage: ");//enter name as XX to quit
scanf("%s %s %s", name, age, wage);
while(isXX(name[])) // //LINE 22
{
printf("input name, age and wage: ");//enter name as XX to quit
scanf("%s %s %s", name, age, wage);
}
return 0;
}
现在我不知道为什么我在编译器中遇到这个错误但我
lab4q5.c: In function âmainâ:
lab4q5.c:22: error: expected expression before â]â token
答案 0 :(得分:5)
使用atoi
和atof
函数分别从字符串转换为int
和float
。您可以先将age
和wage
作为字符串阅读,然后使用这些函数将字符串转换为相应的类型,并将它们分配给相应的新变量。
顺便说一下,不要忘记包含stdlib.h
以使其正常工作。
更正了您的代码版本:
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 20
int main()
{
char age[MAX_SIZE];
char name[MAX_SIZE];
char wage[MAX_SIZE];
int ageInteger;
float wageFloat;
printf("input name, age and wage: ");
scanf("%s %s %s", name, age, wage); //LINE 10
ageInteger=atoi(age);
wageFloat=atof(wage);
printf("Age:%d, Wage:%f\n",ageInteger,wageFloat);
return 0;
}
希望这会有所帮助......
修改强>
一条评论指出atoi
,atof
在错误的情况下有未定义的行为,并建议使用stdtol
和stdtod
代替atoi
,{ {1}}。我自己也不知道这件事。所以,在使用它们之前要谨慎一点,并选择仔细选择你想做的研究。
答案 1 :(得分:3)
您正在将它们作为字符串读取并将它们分配给非字符串变量。
因此您需要更改代码:
int age;
char name[MAX_SIZE];
float wage;
为:
char age [3];
char name[MAX_SIZE];
char wage[MAX_SIZE];
或
scanf("%s %s %s", name, &age, &wage)
到
scanf("%s %d %f", name, &age, &wage)
根据您对问题的评论,我的问题是为什么您希望将它们作为字符串开头?
答案 2 :(得分:2)
您尝试读取字符串,但将值分配给非字符串。
尝试在scanf格式字符串中使用正确的类型:
scanf("%s %d %f", name &age &wage);
您可以查看scanf格式字符串的使用方式on wikipedia