是否可以scanf
定义数据类型?
#include <stdio.h>
enum numberByMonth {jan=1,feb,mar,apr,may,jun,jul,aug,sep,okt,nov,dec};
main(){
printf("\n");
printf("Get Number By Month (type first 3 letters): ");
enum numberByMonth stringy;
scanf("%u",stringy);
printf("Your month number is: %u",stringy);
}
有人可以帮助我扫描哪种数据类型?我把它设置为%u因为gcc告诉我它是无符号整数。
答案 0 :(得分:2)
您编写的代码应该正常工作,但不是按照您的意图,实际上枚举在编译后被强制为整数,并且在您的目标文件中没有任何痕迹 “jan,feb,mar,apr,may,jun,jul,aug,sep,okt,nov,dec”,因此你的程序只是用scanf从命令行解析一个无符号数字,并在printf后返回相同的数字。你可能想要这个
#include <stdio.h>
#include <string.h>
char* months[] = {"jan","feb","mar","apr","may","jun","jul","aug","sep","okt","nov","dec"};
int main()
{
printf("\n");
printf("Get Number By Month (type first 3 letters): ");
char str[3];
scanf("%s",str);
int i;
for(i=0; i<12; i++)
{
if(!strcmp(str,months[i]))
{
printf("Your month number is: %d",i+1);
}
}
return 0;
}
它不使用枚举,但它是合理的,因为枚举用于保持源可读性而不会影响效率,因此这是因为整数而不是字符串,所以如果你想要做的是字符串解析,你必须使用字符串,因为你必须将用户输入与“jan”,“feb”等进行比较。