scanf 只从句子中读取一个单词
Scanf reads only one word from sentence
我是 C 的新手,有点小问题。我需要编写一个程序,让用户输入文本,然后程序显示文本的长度。
我尝试使用 strlen(),但这不是我想要的。
char a[20];
scanf("%s",a)
如果我输入“Hello world”,结果是 5,但我需要 11。
我需要使用 scanf,但也许无法使用它...
%s
是字符串的正确说明符:
char a[20];
scanf("%s", a);
printf("%d", strlen(a));
但是 %s
在空格处停止。如果你也想阅读空格,你应该这样做:
scanf("%[^\n]", a);
scanf() 仅用于一个单词。当它看到一个白色的 space 字符(space,新行)和结尾时,它需要一个词。您应该再次使用 scanf() 来获取另一个词。您可以使用 fgets() 获取一条线。但不要忘记阅读如何使用 fgets() 函数。
另外,用scanf存储必须使用地址
int a;
scanf("%d",&a);
但是对于 char 数组不需要它,因为 char 数组的名称是地址。
char[10]a;
scanf("%s",a);
将 %d 更改为 %s 因为
d代表整数,s代表字符串。
另一个问题是 scanf 将扫描输入直到第一个空格。
在此处阅读更多相关信息 https://www.tutorialspoint.com/format-specifiers-in-c
这次通话
scanf("%s",a)
填充字符数组 a 直到遇到白色 space。所以这个调用将只读取单词“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" )] = '[=15=]';
size_t n = strlen( s );
printf( "%zu\n", n );
这是一个演示程序。
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[20] = "";
fgets( a, sizeof( a ), stdin );
a[strcspn( a, "\n" )] = '[=16=]';
size_t n = strlen( a );
printf( "%zu: %s\n", n, a );
return 0;
}
再次进入
Hello world
然后输出将与上面显示的相同
11: Hello world
我是 C 的新手,有点小问题。我需要编写一个程序,让用户输入文本,然后程序显示文本的长度。
我尝试使用 strlen(),但这不是我想要的。
char a[20];
scanf("%s",a)
如果我输入“Hello world”,结果是 5,但我需要 11。
我需要使用 scanf,但也许无法使用它...
%s
是字符串的正确说明符:
char a[20];
scanf("%s", a);
printf("%d", strlen(a));
但是 %s
在空格处停止。如果你也想阅读空格,你应该这样做:
scanf("%[^\n]", a);
scanf() 仅用于一个单词。当它看到一个白色的 space 字符(space,新行)和结尾时,它需要一个词。您应该再次使用 scanf() 来获取另一个词。您可以使用 fgets() 获取一条线。但不要忘记阅读如何使用 fgets() 函数。
另外,用scanf存储必须使用地址
int a;
scanf("%d",&a);
但是对于 char 数组不需要它,因为 char 数组的名称是地址。
char[10]a;
scanf("%s",a);
将 %d 更改为 %s 因为 d代表整数,s代表字符串。
另一个问题是 scanf 将扫描输入直到第一个空格。
在此处阅读更多相关信息 https://www.tutorialspoint.com/format-specifiers-in-c
这次通话
scanf("%s",a)
填充字符数组 a 直到遇到白色 space。所以这个调用将只读取单词“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" )] = '[=15=]';
size_t n = strlen( s );
printf( "%zu\n", n );
这是一个演示程序。
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[20] = "";
fgets( a, sizeof( a ), stdin );
a[strcspn( a, "\n" )] = '[=16=]';
size_t n = strlen( a );
printf( "%zu: %s\n", n, a );
return 0;
}
再次进入
Hello world
然后输出将与上面显示的相同
11: Hello world