Scanf 只从句子中读取一个单词

问题描述

我是 C 的新手,我遇到了一个小问题。我需要编写一个程序,让用户输入文本,然后程序显示文本的长度。

我尝试过 strlen(),但这不是我想要的。

char a[20];
scanf("%s",a)

如果我输入“Hello world”,结果是 5,但我需要 11。

我需要使用 scanf,但也许用它来做这件事是不可能的...

解决方法

这个电话

scanf("%s",a)

填充字符数组 a 直到遇到空格。所以这个调用只会读取单词“Hello”,而输入缓冲区仍然会保留第二个单词“world”。

你可以使用任何一个

char a[20];
scanf("%19[^\n]",a );
size_t n = strlen( s );
printf( "%zu\n",n );

这是一个演示程序

#include <stdio.h>
#include <string.h>

int main(void) 
{
    char a[20] = "";
    
    scanf( "%19[^\n]",a );
    
    size_t n = strlen( a );
    
    printf( "%zu: %s\n",n,a );
    
    return 0;
}

如果进入

Hello world

那么输出是

11: Hello world

char a[20];

fgets( a,sizeof( a ),stdin );
a[strcspn( a,"\n" )] = '\0';

size_t n = strlen( s );
printf( "%zu\n",n );

这是一个演示程序。

#include <stdio.h>
#include <string.h>

int main(void) 
{
    char a[20] = "";
    
    fgets( a,stdin );
    a[strcspn( a,"\n" )] = '\0';
    
    size_t n = strlen( a );
    
    printf( "%zu: %s\n",a );
    
    return 0;
}

再次输入

Hello world                               

那么输出就会和上图一样

11: Hello world
,

%s 是字符串的正确说明符:

char a[20];
scanf("%s",a);
printf("%d",strlen(a));

然而 %s 在空格处停止。如果你也想阅读空格,你应该这样做:

scanf("%[^\n]",a);

,

scanf() 仅用于一个单词。当它看到一个空白字符(空格,换行)和结尾时,它需要一个词。您应该再次使用 scanf() 来获取另一个词。您可以使用 fgets() 取一行。但是不要忘记阅读如何使用 fgets() 函数。

另外,你必须使用一个地址来存储 scanf。

int a;
scanf("%d",&a);

但是对于字符数组您不需要它,因为字符数组的名称是地址。

char[10]a;
scanf("%s",a);
,

将 %d 更改为 %s,因为 d 代表整数,s 代表字符串。

另一个问题是 scanf 会扫描输入直到第一个空格。

在此处阅读更多相关信息https://www.tutorialspoint.com/format-specifiers-in-c