[英]Scanning floats and ints as a string in C
#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
但將其作為String進行我的實驗室之一。 我知道我可以將%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
使用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
, atof
。 我本人對此一無所知。 因此,在使用它們之前要格外謹慎,並通過一些研究仔細選擇了您想要做的事情。
您正在將它們讀取為字符串並將其分配給非字符串變量。
因此,您需要更改以下代碼:
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)
根據對您的問題的評論,我的問題是,為什么要以字符串開頭?
您正在嘗試讀取字符串,但將值分配給非字符串。
嘗試在scanf格式字符串中使用正確的類型:
scanf("%s %d %f", name &age &wage);
您可以看看Wikipedia如何使用scanf格式字符串
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.