有没有办法扫描包含空格的完整行并将其存储在一个变量中?
我在网上尝试了很多东西,如:
scanf("%[^\n]s",str);
scanf("%20[0-9a-zA-Z ]", str);
scanf("%20[^\n]", str);
无效。
我有类似的东西:
#include <stdio.h>
#include <stdlib.h>
void main(){
while (1) {
int command = 0;
printf("Enter a command(0-10):");
scanf("%d", &command);
switch (command) {
case 4:
{
char message[20];
printf("Please enter the message:");
scanf("%s", message);
break;
}
}
}
}
当我为&#34;命令&#34;输入值4时变量,然后是一些包含&#34; message&#34;的空格的输入。数组像:&#34;你好所有&#34; 然后我进入无限循环,我不知道为什么?
我想到了像scanf(&#34;%s [\ n]&#34;,message);因为我想要阅读,直到我达到一个新的行,但结果更糟(请告诉我这个场景中%s [\ n]的含义,是否与我的想法相同)。
那么如何扫描包含整个行的空格以及scanf(&#34;%s [\ n]&#34;,message)的含义一般是什么?
更新
实际上,我之前尝试过使用fgets,但结果更糟,例如:
#include <stdio.h>
#include <stdlib.h>
void main(){
while (1) {
int command = 0;
printf("Enter a command(0-10):");
scanf("%d", &command);
switch (command) {
case 4:
{
char message[20];
printf("Please enter the message:");
fgets (message, 20, stdin);
break;
}
}
}
}
这里的程序正在跳过阅读&#34;消息&#34;,你可以尝试一下吗?有什么我想念的。
答案 0 :(得分:3)
如果您想阅读行,那么简单而强大的解决方案就是使用fgets()
。根本不要使用scanf()
(相关:Why does everyone say not to use scanf? What should I use instead?)。
fgets()
有一点需要注意 - 如果缓冲区有足够的空间需要注意,它也会在换行符中读取。