繁体   English   中英

如何使用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调用的返回值,则会看到第二个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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM