Scanf只读句子中的一个单词 [英] Scanf reads only one word from sentence

查看:7
本文介绍了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[^
]",a );
size_t n = strlen( s );
printf( "%zu
", n );

这里是一个演示程序

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

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

如果输入

Hello world

则输出为

11: Hello world

char a[20];

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

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

这里是一个演示程序。

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

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

如果输入

,请再次输入
Hello world                               

则输出将与上面所示相同

11: Hello world

这篇关于Scanf只读句子中的一个单词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆