如何使用 scanf 读取空格
How to read white spaces with scanf
即使我在 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
,所以程序从 OS 中读取 123\n
。
scanf
看到换行符不再是数字的一部分,并在 处停止,将换行符 留在输入缓冲区中(在 stdio 内)。第二个 scanf
尝试读取不是换行符的内容,但不能这样做,因为它首先看到的是换行符。如果您检查 scanf
调用的 return 值,您会看到第二个 scanf return 为零,即它无法完成您要求的转换。
相反,使用 fgets
或 getline
:
一次阅读整行
#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
即使我在 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
,所以程序从 OS 中读取 123\n
。
scanf
看到换行符不再是数字的一部分,并在 处停止,将换行符 留在输入缓冲区中(在 stdio 内)。第二个 scanf
尝试读取不是换行符的内容,但不能这样做,因为它首先看到的是换行符。如果您检查 scanf
调用的 return 值,您会看到第二个 scanf return 为零,即它无法完成您要求的转换。
相反,使用 fgets
或 getline
:
#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