对于非常简单的C代码有疑问。我编写了一个代码来计算字符串的长度,而无需使用strlen函数。如果我输入的字符串之间没有空格,则下面的代码可以正常工作。但是,如果我输入“我的名字是---”之类的字符串,则显示的长度就是第一个空格之前的单词的长度,在示例中为2。为什么?空格和空字符不是两个不同的字符吗?请指导我如何更改代码,以便返回整个字符串长度?
char s[1000];
int length = 0;
printf ("Enter string : ");
scanf ("%s", s);
for (int i = 0; s[i] != '\0'; i++)
{
length++;
}
printf ("Length of given string : %d", length);
答案 0 :(得分:2)
这是因为scanf
和%s
一直读取直到找到空白为止。
匹配一系列非空格字符;下一个指针 必须是足以容纳字符的字符数组的指针 输入序列和终止的空字节('\ 0'),已添加 自动。输入字符串停在空白处或最大处 字段宽度,以先到者为准。
如果您想读到\n
(包括空白),可以执行以下操作。
scanf("%999[^\n]", s);
或者您可以使用fgets
。
答案 1 :(得分:-2)
scanf读取数据,直到“ \ 0”或“ \ 20”为止。因此,请使用“ fgets”方法读取数据,直到带有“ stdin”的“ \ n”(下一行)为止,
示例程序:
#include <stdio.h>
int main() {
char s[100];
printf("Input String: ");
fgets(s, sizeof(s), stdin);
printf("\nLength of the string is = %d", printf("%s"), s);
return 0;
}