C语言输入字符串
首先强调一点,C语言没有字符串的概念!所谓的字符串实际上还是以数组形式保存的。
方法1 —— 通过"%s"输入
优点:简单明了,输入字符只要不大于数组长度都可以。
#include <stdio.h> int main() {
char s[100]="\0";//数组初始化
scanf("%s",s);
for(int i=0;i<100;i++){//打印输入的一串字符
printf("%c",s[i]);
}
}
输入:asdfasdfasd12341234
输出:asdfasdfasd12341234
方法2 —— 通过for循环输入
缺点:输入的数长度固定,并且空格和换行符都会被判定为输入字符。
#include <stdio.h> int main() {
char s[100]="\0";//初始化
for(int j=0;j<10;j++){//定义输入10个字符
scanf("%c",&s[j]);//逐个获取输入字符(包括空格和换行符)
}
for(int i=0;i<100;i++){//打印输入
printf("%c",s[i]);
}
}
输入:asd 123 hjk
输出:asd 123 hj
方法3 —— 通过gets()输入
使用gets()应注意: gets() 函数从标准输入读入 一行文本,直到读到 新行符 或 EOF 字符 之前,不会停止读入文本。也就是:gets() 不检查边界。因此,当变量空间 小于 一行字符串 时, 使用 gets() 会造成 溢出,程序出错。
#include <stdio.h> int main() {
char s[100]="\0"; //初始化
gets(s); //获取输入
for(int i=0;i<100;i++){ //打印输入
printf("%c",s[i]);
}
}
运行结果:会提示 warning: this program uses gets(), which is unsafe.
原因就是:gets() 函数从标准输入读入 一行文本,直到读到 新行符 或 EOF 字符 之前,不会停止读入文本。也就是:gets() 不检查边界。因此,当变量空间 小于 一行字符串 时, 使用 gets() 会造成 溢出,程序出错。
那么什么时候会出错呢?看下面这种情况
#include <stdio.h> int main() {
int n=0;
char s[100]="\0";
scanf("%d",&n); //获取 n 的值
gets(s); //获取 s 字符数组 printf("%d\n",n); //打印 n 的值
for(int i=0;i<100;i++){ //打印 s 字符数组
printf("%c",s[i]);
}
}
运行结果:
为什么 gets()没有被执行呢?
原因是在 gets() 之前有 scanf() ,当输入5之后敲了回车(enter)然而回车并没有没有被n接收让gets()给接收了,gets()接收回车之后就结束输入了。
所以gets()并不是没有执行而是接收了回车,解决办法如下。
#include <stdio.h> int main() {
int n=0;
char s[100]="\0";
scanf("%d",&n); //获取 n 的值
getchar(); //接收回车符
gets(s); //获取 s 字符数组 printf("%d\n",n); //打印 n 的值
for(int i=0;i<100;i++){ //打印 s 字符数组
printf("%c",s[i]);
}
}
在 scanf() 和 gets() 之间插入 getchar() 用于接收 回车符。
C语言输入字符串的更多相关文章
- C 语言 输入字符串 并计算输入的字符的长度
int main(void) { char a[50];int i=0;char *j;gets(a);//输入字符串j=a;while(*j!='\0'){j++;//指针指向下一个数组字符i++; ...
- 【转】C语言中字符串输入的三种方法
在网上看到,讲的还算详细,转过来学习一下...... ======================================================================= 使 ...
- C语言风格字符串的概念、定义、输入字符串、输出字符串
字符串: C语言中最有用.最重要的数据类型之一. 字符串:是以\0字符结尾的char类型数组.所以可以把数组和指针知识应用于字符串. 如何在程序定义字符串: 1.字符串字面量 用双引号括起来的内容称为 ...
- C语言之字符串处理函数
C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为p ...
- C语言学习 —— 字符串的学习(一)
这是本人在学习 C语言有关 字符串内容 时的相关笔记 由于本人技术有限,如有错误,还望指正 C语言中数据类型中只有 字符型(char),而 char型 变量一次只能存储一个字符,在日常工作中经常需要定 ...
- c语言输入输出函数
上学年学习c语言的时候比较匆忙,没好好吸收. 现在有时间好好复习下. 本文就c语言常见输入函数进行简单介绍,对比. ps:由于自己能力有限,时间有限,多数介绍,总结都是摘录网上相关学习资料,下面给出本 ...
- Go语言中字符串的查找方法小结
这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下 1.func Contains(s, substr strin ...
- C语言常用字符串函数总结
ANSI C中有20多个用于处理字符串的函数: 注意:const 形参使用了const限定符,表示该函数不会改变传入的字符串.因为源字符串是不能更改的. strlen函数: 函数原型:unsigned ...
- C 语言实例 - 字符串排序
C 语言实例 - 字符串排序 C 语言实例 C 语言实例 按字典顺序排序. 实例 #include<stdio.h> #include <string.h> int main( ...
随机推荐
- Spring Cloud 学习 (六) Spring Cloud Config
在实际开发过程中,每个服务都有大量的配置文件,例如数据库的配置.日志输出级别的配置等,而往往这些配置在不同的环境中也是不一样的.随着服务数量的增加,配置文件的管理也是一件非常复杂的事 在微服务架构中, ...
- mySQL初学者一定要掌握的数据操纵
本文献给与作者一样不断地在追求梦想的小伙伴! 文章目录 1.INSERT 语句为表中所有字段添加数据 (1)可以指定所有字段名添加数据 (2)可以不指定字段名添加数据 (3)可以指定部分字段添加数据 ...
- 腾讯牛逼!终于开源了自家的 Tencent JDK——Kona!!.md
是的,继阿里 2019/03 开源基于 OpenJDK 的长期支持版本 Alibaba Dragonwell 之后,腾讯也发布了自家的开源免费的 JDK 版本--Tencent Kona,必须替小马哥 ...
- 老猿Python部分代码样例
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 PyQt编程实战:通过eventFilter监视QScrollArea的widget()的Paint ...
- 面试阿里,字节,腾讯90%被问到的springboot常见面试题,这次给你讲的明明白白!
1.什么是Spring Boot? 多年来,随着新功能的增加,spring变得越来越复杂.只需访问https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用的所有 ...
- leetcode计划(二)——ps:复习面试题计划+锻炼计划
5.24周日 下周是新的一周,发布任务 一.leetcode计划题目:300,416,494,474(前四个动态规划)(plus:860),232,225,155(后三个栈) 建议之后可以先做:cs- ...
- 题解-[国家集训队]Crash的数字表格 / JZPTAB
题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...
- postgresql 运行sql文件
方法一: [postgres@node01 ~]$ psql -Upostgres postgres=# \l List of databases Name | Owner | Encoding | ...
- Scala中的IO操作及ArrayBuffer线程安全问题
通过Scala对文件进行读写操作在实际业务中应用也比较多,这里介绍几种常用的方式,直接上代码: 1. 从文件中读取内容 object Main { def loadData(): Array[Stri ...
- matplotlib的学习16-animation动画
from matplotlib import pyplot as plt from matplotlib import animation import numpy as np fig, ax = p ...