所以我有一个简单的函数,只需要输入一些输入并在每次运行函数时打印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,然后接受更多输入。为什么会这样?
答案 0 :(得分:1)
如果我输入" 1 2 3 4"这个词"你好"将被打印四次。我假设函数会打印一次hello,然后接受更多输入。为什么会这样?
scanf()
转换说明符%s
读取一系列非空白字符。
调用takeInput()
,输入"1 2 3 4"
,scanf()
处理1
,函数返回。
然后再调用三次,处理仍在输入缓冲区中的2
,3
和4
。
然后该函数被第五次调用,正在等待输入。
strtok()
不会对输入进行标记,因为input
永远不会包含任何空格。
您可能正在寻找fgets( input, 50, stdin )
来阅读输入的整个行。 (检查末尾是否存在\n
,以确保您实际捕获了整个输入。)