问题描述
我是 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