gpt4 book ai didi

c - 如何在c中扫描包含空格的完整行

转载 作者:行者123 更新时间:2023-11-30 18:35:33 25 4
gpt4 key购买 nike

有没有一种方法可以扫描包含空格的完整行并将其存储在一个变量中?

我在网上尝试了很多东西,例如:

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;
}
}
}
}

当我为“command”变量输入值4,然后输入一些包含“message”数组空格的输入时,例如:“hello all”然后我进入无限循环,我不知道为什么?

我想到了像 scanf("%s[\n]", message); 这样的东西因为我想读到新的一行,但这会产生更糟糕的结果(请告诉我 %s[\n] 在这种情况下的含义,与我想到的含义相同)。

那么如何扫描包含空格的完整行以及 scanf("%s[\n]",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;
}
}

}

}

这里程序正在跳过读取“消息”,你们可以尝试一下吗?我有什么遗漏的吗?

最佳答案

如果您想读取,那么简单而强大的解决方案是使用 fgets() 。只是根本不要使用 scanf() (相关: Why does everyone say not to use scanf? What should I use instead? )。

fgets() 有一个警告 - 如果缓冲区有足够的空间(您需要注意),它也会读取换行符。

关于c - 如何在c中扫描包含空格的完整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46245765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com