首页 > 解决方案 > C语言中带空格的scanf

问题描述

我有这个结构:

struct bye {
    char b;
    char y;
    char e;
}

我想读scanf一行包含 3 个字母的单词,但在彼此之间,有相同的未知数量的空格。

例如:"b[n 个空格]y[n 个空格]e" 然后输入:

struct bye word;

word.b = 'b' word.y = 'y'word.e = 'e'

我做了这样的事情,但它不起作用:

typedef struct bye bye_s; 

bye_s setInput() {
    bye_s ret;
    char current_char;

    scanf("%c", &current_char);
    ret.b = current_char;

    do {
        scanf("%c", &current_char);
    } while (current_char == ' ');
    ret.y = current_char;

    do {
        scanf("%c", &current_char);
    } while (current_char == ' ');
    ret.e = current_char;

    return ret;
}

标签: cinputstructscanfspace

解决方案


只需使用

if (scanf("%c %c %c", &ret.b, &ret.y, &ret.e) != 3) {
   /* failed */
}

scanf 格式的任何空白都意味着跳过输入中的任何数量的空白。

永远不要忘记检查scanf返回值!


推荐阅读