gpt4 book ai didi

c - 如何使用scanf读取空格

转载 作者:行者123 更新时间:2023-11-30 14:58:03 25 4
gpt4 key购买 nike

即使我在 scanf("[^\n]s", x)"%34[^\n]" 中使用此条件,或%127s,我无法正确获得答案。 scanf 区域或其他部分是否有任何问题......

#include <stdio.h>

int main()
{
int i = 4;
double d = 4.0;
char s[] = "hello ";
int a;
double b;
unsigned char string_2[100];
scanf("%d",&a);
scanf("%lf",&b);
scanf("%[^\n]s",string_2);
printf("%d",a+i);
printf("\n%lf",d+b);
printf("\n%s",s);
printf("%s",string_2);
return(0);
}

最佳答案

不要像这样使用scanf

在此:

scanf("%lf",&b);
scanf("%[^\n]s",string_2);

第一个 scanf 从输入中读取一个数字,但必须等待您的终端首先为程序提供完整的输入行。假设用户为123,因此程序从操作系统读取123\n

scanf 看到不再是数字一部分的换行符,并在输入缓冲区(在 stdio 内)中留下换行符处停止。第二个 scanf 尝试读取不是换行符的内容,但无法做到这一点,因为它看到的第一件事是换行符。如果您检查 scanf 调用的返回值,您将看到第二个 scanf 返回零,即它无法完成您要求的转换。

相反,使用 fgetsgetline 一次读取整行:

#include <stdio.h>
int main(void)
{
char *buf = NULL;
size_t n = 0;
double f;
getline(&buf, &n, stdin);
if (sscanf(buf, "%lf", &f) == 1) {
printf("you gave the number %lf\n", f);
}
getline(&buf, &n, stdin);
printf("you entered the string: %s\n", buf);
return 0;
}

有关更长的讨论,请参阅:http://c-faq.com/stdio/scanfprobs.html

关于c - 如何使用scanf读取空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43508218/

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