【发布时间】:2021-07-11 22:25:36
【问题描述】:
我需要不断地从用户那里获取命令,为此我写了这个:
scanf("%s %d %s %d", str1, &num1, str2, &num2);
用户应该输入如下内容:
move 8 over 3
当用户键入exit 并输入时,就这一行,我必须停止阅读并打印结果。问题是,我不知道该怎么做。
代码上下文:
do{
scanf("%s %d %s %d", str1, &num1, str2, &num2);
do_stuff(vp, str1, str2, num1, num2, size);
}while (strncmp(str1, exit, 4)); // I used this but I must write (exit 1 exit 1) at least.
在strncmp() 中,exit 是一个字符串,带有“exit”,因此比较这四个前字符我可以停止循环,但我必须输入所有四个预期的输入。
【问题讨论】:
-
不要将
scanf用于可变输入格式。使用fgets获取一行,然后使用sscanf或strtok解析该行。例如,使用sscanf仅获取第一个单词,检查是否为"exit",然后通过退出或解析字符串的其余部分进行相应处理。 -
但这会读取空间吗?
-
你指的是什么空间?为什么这很重要?请说清楚一点。
-
例如,我将只写一行
move 6 over 3。在你的方式中会不会读全行?或者只是第一个空格之前的单词? -
fgets读取整行。然后,您可以使用sscanf或strtok将其拆分。这称为“标记化”。