用换行符和空格读取字符串

时间:2017-12-10 14:29:13

标签: c parsing scanf fgets

我正在尝试从stdin解析一个字符串,例如这个{ 7 , 3,5 ,11, 8, 16, 4, 9, 2 ,8, 4, 2}(在2和8之间有一个\ n)。

我已经创建了一个函数来提取数字和修剪逗号空格和换行符(接受char *作为输入)但问题是当我尝试使用scanf获取输入时我无法获得空格所以我使用了fgets但是fgets会在看到\ n后立即退出。

有没有办法从中获取字符串?

2 个答案:

答案 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;
    }
}