我正在尝试从stdin解析一个字符串,例如这个{ 7 , 3,5 ,11, 8, 16, 4, 9, 2
,8, 4, 2}
(在2和8之间有一个\ n)。
我已经创建了一个函数来提取数字和修剪逗号空格和换行符(接受char *作为输入)但问题是当我尝试使用scanf获取输入时我无法获得空格所以我使用了fgets但是fgets会在看到\ n后立即退出。
有没有办法从中获取字符串?
答案 0 :(得分:1)
int nums[1000], count = 0;
char chr;
while(scanf("%c%d", &chr, &nums[count]) > 0) //there was at least one match
{
if(chr == '}')
break; //we have reached the end
if(chr != ',' && chr != '{')
continue; //skip spaces (} is an exception)
count++;
}
答案 1 :(得分:0)
您可以使用fgets
阅读整行,并使用strtok
来读取数字。以下示例还会将\n
视为逗号,
char line[512];
char *buf = 0;
while(fgets(line, sizeof(line), stdin))
{
if(!strstr(line, "{") && !buf)
continue;
if(!buf)
{
buf = strdup(line);
}
else
{
buf = realloc(buf, strlen(buf) + strlen(line) + 1);
strcat(buf, line);
}
if(strstr(line, "}"))
{
char *token = strtok(buf, "{");
strtok(buf, ",}\n");
while(token)
{
int n = 0;
sscanf(token, "%d", &n);
printf("%d, ", n);
token = strtok(NULL, ",}\n");
}
free(buf);
break;
}
}