如何使用C语言scanf函数准确输入字符串?

2026-04-29 13:493阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计968个文字,预计阅读时间需要4分钟。

如何使用C语言scanf函数准确输入字符串?

以下是对伪原创内容的简化

如何使用C语言scanf函数准确输入字符串?

除了在定义字符数组时初始化外,还可以通过scanf从键盘输入字符串。

下面是一个相应的程序示例:

c#include

int main() { char str[100]; // 定义字符数组

// 使用scanf从键盘读取字符串 printf(请输入一个字符串:); scanf(%99s, str); // 读取不超过99个字符的字符串

printf(您输入的字符串是:%s\n, str);

return 0;}

除了在定义字符数组时初始化外,还可以通过scanf从键盘输入字符串。下面写一个程序:

# include <stdio.h> int main(void) { char str[10]; //str是string的缩写, 即字符串 printf("请输入字符串:"); scanf("%s", str); /*输入参数是已经定义好的“字符数组名”, 不用加&, 因为在C语言中数组名就代表该数组的起始地址*/ printf("输出结果:%s\n", str); return 0; } 输出结果是:
请输入字符串:爱你一生一世
输出结果:爱你一生一世

用 scanf 给字符数组赋值不同于对数值型数组赋值。前面讲过,给数值型数组赋值时只能用 for 循环一个一个地赋值,不能整体赋值。而给字符数组赋值时可以直接赋值,不需要使用循环。此外从键盘输入后,系统会自动在最后添加结束标志符 '\0'。但是用 scanf 输入字符串时有一个地方需要注意:如果输入的字符串中带空格,比如“i love you”,那么就会有一个问题。我们将上面程序运行时输入的字符串改一下:

# include <stdio.h> int main(void) { char str[10]; //str是string的缩写, 即字符串 printf("请输入字符串:"); scanf("%s", str); //输入参数是已经定义好的字符数组名 printf("输出结果:%s\n", str); return 0; } 输出结果是:
请输入字符串:i love you
输出结果:i

我们看到,输入的是“i love you”,而输出的只有“i”。原因是系统将空格作为输入字符串之间的分隔符。也就是说,只要一“敲”空格,系统就认为当前的字符串已经结束,接下来输入的是下一个字符串,所以只会将空格之前的字符串存储到定义好的字符数组中。

那么这种情况该怎么办?那么就以空格为分隔符,数数有多少个字符串,有多少个字符串就定义多少个字符数组。比如“i love you”有两个空格,表示有三个字符串,那么就定义三个字符数组:

# include <stdio.h> int main(void) { char str1[10], str2[10], str3[10]; printf("请输入字符串:"); scanf("%s%s%s", str1, str2, str3); printf("输出结果:%s %s %s\n", str1, str2, str3); //%s间要加空格 return 0; } 输出结果是:
请输入字符串:i love you
输出结果:i love you

需要注意的是,前面讲“清空缓冲区”的时候讲过,用 scanf 输入时,不管输入什么,最后“敲”的回车都会被留在缓冲区,这里也不例外。输入字符串时最后“敲”的回车也会被留在缓冲区,如果紧接着要给一个字符变量赋值的话,那么还没等你输入系统就自动退出来了。因为系统自动将回车产生的字符 '\n' 赋给该字符变量了,所以此时对字符变量赋值前要首先清空缓冲区。

本文共计968个文字,预计阅读时间需要4分钟。

如何使用C语言scanf函数准确输入字符串?

以下是对伪原创内容的简化

如何使用C语言scanf函数准确输入字符串?

除了在定义字符数组时初始化外,还可以通过scanf从键盘输入字符串。

下面是一个相应的程序示例:

c#include

int main() { char str[100]; // 定义字符数组

// 使用scanf从键盘读取字符串 printf(请输入一个字符串:); scanf(%99s, str); // 读取不超过99个字符的字符串

printf(您输入的字符串是:%s\n, str);

return 0;}

除了在定义字符数组时初始化外,还可以通过scanf从键盘输入字符串。下面写一个程序:

# include <stdio.h> int main(void) { char str[10]; //str是string的缩写, 即字符串 printf("请输入字符串:"); scanf("%s", str); /*输入参数是已经定义好的“字符数组名”, 不用加&, 因为在C语言中数组名就代表该数组的起始地址*/ printf("输出结果:%s\n", str); return 0; } 输出结果是:
请输入字符串:爱你一生一世
输出结果:爱你一生一世

用 scanf 给字符数组赋值不同于对数值型数组赋值。前面讲过,给数值型数组赋值时只能用 for 循环一个一个地赋值,不能整体赋值。而给字符数组赋值时可以直接赋值,不需要使用循环。此外从键盘输入后,系统会自动在最后添加结束标志符 '\0'。但是用 scanf 输入字符串时有一个地方需要注意:如果输入的字符串中带空格,比如“i love you”,那么就会有一个问题。我们将上面程序运行时输入的字符串改一下:

# include <stdio.h> int main(void) { char str[10]; //str是string的缩写, 即字符串 printf("请输入字符串:"); scanf("%s", str); //输入参数是已经定义好的字符数组名 printf("输出结果:%s\n", str); return 0; } 输出结果是:
请输入字符串:i love you
输出结果:i

我们看到,输入的是“i love you”,而输出的只有“i”。原因是系统将空格作为输入字符串之间的分隔符。也就是说,只要一“敲”空格,系统就认为当前的字符串已经结束,接下来输入的是下一个字符串,所以只会将空格之前的字符串存储到定义好的字符数组中。

那么这种情况该怎么办?那么就以空格为分隔符,数数有多少个字符串,有多少个字符串就定义多少个字符数组。比如“i love you”有两个空格,表示有三个字符串,那么就定义三个字符数组:

# include <stdio.h> int main(void) { char str1[10], str2[10], str3[10]; printf("请输入字符串:"); scanf("%s%s%s", str1, str2, str3); printf("输出结果:%s %s %s\n", str1, str2, str3); //%s间要加空格 return 0; } 输出结果是:
请输入字符串:i love you
输出结果:i love you

需要注意的是,前面讲“清空缓冲区”的时候讲过,用 scanf 输入时,不管输入什么,最后“敲”的回车都会被留在缓冲区,这里也不例外。输入字符串时最后“敲”的回车也会被留在缓冲区,如果紧接着要给一个字符变量赋值的话,那么还没等你输入系统就自动退出来了。因为系统自动将回车产生的字符 '\n' 赋给该字符变量了,所以此时对字符变量赋值前要首先清空缓冲区。