#include<stdio.h>
#include<string.h>
int main()
{
char buffer[32];
char c;
int i;
printf("input: ");
fgets(buffer, 32, stdin);
printf("items filled: %d\n", sscanf("%c%d\n", &c, &i));
printf("%c%d\n", c, i);
return 0;
}
当输入一个后跟数字“f7”的字符时,我希望“f”进入变量c
,而“7”进入变量i
。出于某种原因,sscanf()
无法填充两者,我得到了他们的初始垃圾值。我做错了什么?
答案 0 :(得分:6)
实际sscanf()
签名是这样的:
int sscanf(const char *str, const char *format, ...);
检查您使用了错误签名的sscanf()
签名
应该是
sscanf(buffer,"%c%d\n", &c, &i);
答案 1 :(得分:3)
您未在sscanf()
电话中使用缓冲区,因此它们未被填充。
int i;
char c;
char buffer[32];
fgets(buffer, 32, stdin);
sscanf(buffer, "%c%d", &c, &i)
^
you're missing this part
答案 2 :(得分:3)
请勿使用sscanf
。正在尝试进行解析的正确方法是
#include <stdlib.h>
#include <stdio.h>
// ...
char *endptr, buffer[32];
char c;
int i;
// ...
fgets(buffer, 32, stdin);
c = buffer[0];
i = strtol(buffer+1, &endptr, 10);
if (endptr == buffer+1 || (*endptr != '\0' && *endptr != '\n')) {
puts("invalid input");
return 1;
} else {
printf("%c%d\n", c, i);
return 0;
}
答案 3 :(得分:1)
sscanf("%c%d\n", &c, &i)
查看缓冲区中的c和i,看起来你正在调用此调用。