将输入和分裂转换为令牌重复

时间:2017-04-07 11:19:32

标签: c scanf

所以我有一个简单的函数,只需要输入一些输入并在每次运行函数时打印hello。

void takeInput(void) {

    char *ptrFirst;
    char input[50];
    scanf("%s", input);
    ptrFirst = strtok(input, " ");

    printf("hello");
}

int main(int argc, char** argv) {

    while(true) {
        takeInput();
    }

    return 0;
}

如果我输入“1 2 3 4”,则“hello”一词将被打印四次。我假设函数会打印一次hello,然后接受更多输入。为什么会这样?

1 个答案:

答案 0 :(得分:1)

  

如果我输入" 1 2 3 4"这个词"你好"将被打印四次。我假设函数会打印一次hello,然后接受更多输入。为什么会这样?

scanf()转换说明符%s读取一系列非空白字符

调用takeInput(),输入"1 2 3 4"scanf()处理1,函数返回。

然后再调用三次,处理仍在输入缓冲区中的234

然后该函数被第五次调用,正在等待输入。

strtok()不会对输入进行标记,因为input永远不会包含任何空格。

您可能正在寻找fgets( input, 50, stdin )来阅读输入的整个。 (检查末尾是否存在\n,以确保您实际捕获了整个输入。)