双字符串和浮点数的Scanf
我正在创建一个菜单,需要从用户那里接收三个输入双字符串和浮点数的Scanf,c,scanf,C,Scanf,我正在创建一个菜单,需要从用户那里接收三个输入 char *fullname; char *date; float sal; printf("\nEnter full name: "); 第92行 scanf("%s", &fullname); printf("\nEnter hire date: "); 第94行 scanf("%s", &date); printf("\nEnter salary: "); 第96行 scanf("%d",
char *fullname;
char *date;
float sal;
printf("\nEnter full name: ");
第92行
scanf("%s", &fullname);
printf("\nEnter hire date: ");
第94行
scanf("%s", &date);
printf("\nEnter salary: ");
第96行
scanf("%d", &sal);
这些是我收到的错误
Employee.c:92: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char **’
Employee.c:94: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char **’
Employee.c:96: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘float *’
我能解释一下导致这些问题的原因吗?有几个问题: 第一: 当您对字符串使用
scanf
时,您不使用&
。所以只要scanf(“%s”,全名)代码>
第二:
您的指针未初始化。请尝试以下方法:
char fullname[256];
char date[256];
只要您最多输入255个字符,此功能就可以正常工作
第三:
您上次键入的scanf
不匹配。当您在格式字符串中指定了一个int
时,您正在传递一个float
。试试这个:
scanf("%f", &sal);
这些警告不言自明。使用%s
格式说明符调用scanf
时,需要为其提供指向可复制字符串的字符数组的第一个元素的指针。您没有这样做,而是给它一个指向字符的指针地址
char[100] fullname;
scanf( "%s", fullname );
date也存在同样的问题。另外,请注意,使用上述代码,如果用户输入长度等于或超过100个字符的字符串,则会发生缓冲区溢出
如果您使用的是MSVC,则可以使用scanf_s
函数,该函数要求您输入缓冲区的长度。但是,此功能是特定于Microsoft的,因此不可移植
scanf_s( "%s", fullname, 100 );
对于salary,问题在于格式说明符是%d
,用于读取整数,而不是浮点。使用
scanf( "%f", &sal );
这似乎消除了警告,但当您输入代码时,它在meCan上sefaults,您可以跟踪它在哪一行segfults?好的,我认为它segfulted是因为我做错了什么。我想能够输入一个全名“John Doe”,但因为空格太大而无法输入。有没有办法像这样输入一个字符串我不知道有一个C函数可以读取整行代码。看这个问题:()谢谢你的帮助,我走了另一条路