C/C++中字符串的输入问题

  1 standard C I/O
  2 头文件:#include <stdio.h>
  3
  4 1. getchar()
  5
  6 原型:int getchar(void);
  7 功能:从标准输入获取并返回下一个字符,并释放该字符空间。
  8 返回值:读取的字符的ASCII,出错或到达文件结尾时返回EOF(-1)。
  9
 10 键盘   缓冲区   getchar读取字符
 11 入水口 蓄水池   出水口
 12
 13 a. 我们从键盘输入的字符串首先是放在缓冲区内的,再利用getchar()函数从缓冲区内读取字符。
 14 b. 当用户键入回车符之后,getchar()才开始从缓冲区中读取字符(一次调用读取一个字符)。
 15 c. 键入Enter建实际上产生了2个字符(回车符‘\r‘和换行符‘\n‘)。回车符‘\r‘使光标回到行首,换行符‘\n‘换行。
 16
 17
 18 // 读取含有space(空格),table(制表符)的字符串
 19
 20 #include <stdio.h>
 21
 22 int main()
 23 {
 24     int t;
 25     while (‘\n‘ != (c = getchar())) printf("%c", t);
 26     return 0;
 27 }
 28
 29 /*
 30  * input: 123table456space789
 31  * output: 123        456 789
 32  */
 33
 34 // 当使用scanf()和gets()连用时,要使用getchar()清除scanf()输入完成最后键入的Enter键
 35
 36 #include <stdio.h>
 37
 38 int main()
 39 {
 40     int nCase;
 41     scanf("%d", &nCase);
 42     getchar();        // 清空缓冲区
 43     while (nCase--)
 44     {
 45         char str[10];
 46         gets(str);
 47         printf("%s\n", str);
 48     }
 49     return 0;
 50 }
 51 /*
 52  * input:
 53  * 2
 54  * 123 456
 55  * abc def
 56  * output:
 57  * 123 456
 58  * abc def
 59  */
 60
 61
 62 2. gets()
 63
 64 原型:char* gets(char* str);
 65 功能:从标准输入读取字符并把他们加载到str里,直到遇到换行或者到达EOF
 66 返回值:返回读入的字符串,发生错误时返回NULL
 67
 68 gets()和scanf()都可以输入字符串,两者的异同:
 69 a. 不同点:
 70 scanf()不能接受空格、制表符、回车
 71 gets()可以接受空格、制表符,遇到回车结束输入
 72 b. 相同点:
 73 字符串接受结束后自动加‘\0‘
 74
 75
 76 3. scanf()
 77
 78 原型:int scanf(const char* format,...);
 79 功能:由format指定的格式从标准输入读取,并保存数据到其参数
 80 返回值:成功赋值的变量的个数,发生错误时返回EOF
 81
 82 a. scanf()读取匹配format字符串,当读取到控制字符,它就把值放置到对应变量
 83 b. 空白会跳过,非空白字符和输入匹配,然后丢弃
 84 c. %符号和控制符间的数,控制指定数量的字符转换到变量中
 85 d. scanf()遇到一个字符集(用%[]表示的),那么在括号中的任意字符都会读取到变量中
 86
 87 scanf("%d %d", &a, &b);
 88 如果a和b被成功读入,返回2
 89 如果只有a被成功读入,返回1
 90 如果a和b都未被成功读入,返回0
 91 如果遇到错误或遇到end of file,返回值EOF(-1)
 92 只有当第一个参数为NULL时,才可能返回EOF
 93
 94 可以采用%[^\n]格式控制来输入含有空格,制表符的字符串
 95
 96 #include <stdio.h>
 97
 98 int main()
 99 {
100     char str[50];
101     scanf("%[^\n]", str);
102     printf("%s\n", str);
103     return 0;
104 }
105 /*
106  * input: 123 456
107  * output: 123 456
108  */
109
110
111 C++输入含有空格制表符的字符串
112
113 对于字符数组
114
115 1. getline()
116
117 有两种重载,只介绍一种
118 原型:istream& getline(char* buffer, streamsize num);
119 功能:读取字符到buffer中,直到发生以下情况:
120       a. num - 1个字符已经读入
121       b. 碰到换行符
122       c. 碰到EOF
123       d. 碰到字符delim(delim字符不会被放入buffer中)
124 返回值:如果getline()没有读入字符,将返回false,可用于判断文件是否结束。
125
126 调用方法:cin.getline(str, len);
127 args1: 用来存储输入数据    args2: 要读取的字符数
128
129 #include <iostream>
130 using namespace std;
131
132 int main()
133 {
134     char str[30];
135     cin.getline(str, 30);
136     cout << str << endl;
137     return 0;
138 }
139 /*
140  * input: 123 456
141  * output: 123 456
142  */
143
144
145 2. get()
146
147 有多种重载,只介绍一种
148 原型:istream& get(char* buffer, streamsize num);
149 功能:读取字符到buffer直到num - 1个字符被读入, 或者碰到EOF或换行标志
150 返回值:发生错误时返回false,可用于判断是否正常输入
151
152 调用方法:cin.get(str, len);
153
154 #include <iostream>
155 using namespace std;
156
157 int main()
158 {
159     char str[30];
160     cin.get(str, 30);
161     cout << str << endl;
162     return 0;
163 }
164 /*
165  * input: abc def
166  * output: abc def
167  */
168
169 getline()和get()的区别
170
171 两者都读取一行输入,直至换行符。
172 然后,getline将丢弃换行符,而get()将换行符保留在输入序列里。
173 所以,再使用cin.get()输入多行数据时,中间可以使用get()消除换行符。
174
175 #include <iostream>
176 using namespace std;
177
178 int main()
179 {
180     char str1[30], str2[30];
181     cin.get(str1, 30);
182     cin.get();
183     cin.get(str2, 30);
184     cout << "str1: " << str1 << endl;
185     cout << "str2: " << str2 << endl;
186     return 0;
187 }
188 /*
189  * input: abc def
190  *        123 456
191  * output: str1: abc def
192  *            str2: 123 456
193  */
194
195
196 对string类
197
198 调用方法:getline(cin, str);
199
200 #include <iostream>
201 #include <string>
202 using namespace std;
203
204 int main()
205 {
206     string str;
207     getline(cin, str);
208     cout << str << endl;
209     return 0;
210 }
211 /*
212  * input: 123 456 789
213  * output: 123 456 789
214  */
时间: 2024-11-05 16:04:19

C/C++中字符串的输入问题的相关文章

【C】字符串的输入,求输入字符串中最长的单词

首先,基本目标很简单,就是利用C语言:编写一个函数,输入一行字符,将此行字符中的最长的单词输出. 代码如下: #include<stdio.h> void input(char s[]){ int i=0; for(int c;(c=getchar())!='\n';i++){ s[i]=c; } s[i]='\0';//读取完成,记得对这个字符数组封口 } char* findmax(char s[]){ int max=0,word_length=0,p=0,i=0;//这个p是用来记录最

C语言的字符串转为OC中的字符串,控制台输入用户名和密码,判断输入的用户名是否是@“Frank”, 密码 是否是 @“lanou”, 如果用户名和密码都正确,则输出登录成功, 否则输出登录失败.

char name[20] = "";存储用户名 char code[20] = "";存储密码 printf("请输入用户名与密码"); scanf("%s%s", name, code); NSString *str1 = [NSString stringWithFormat:@"%s", name ]; NSString *str2 =[NSString stringWithFormat:@"

判断输入中字符串长度的代码

//判断输入文本中字符串的长度 if ([self convertToInt:chooseRollTextField.text] > 20) { [self showToast:@"输入的角色名不能超过20个汉字或40个字符哦!"]; return; } - (int)convertToInt:(NSString*)strtemp { int strlength = 0; char* p = (char*)[strtemp cStringUsingEncoding:NSUnico

字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人

输入3个字符串,要求按由小到大的字母顺序输出 如 输入franch england china,输出结果是china england franch 三个数排序输出,比较三个数的大小怎么做? a=18 b= 9 c=30 a>b 交换 a=9 b=18 可不可以用选择法?可不可以用冒泡法?但是这里用不着 例题: string1 string2 string3 temp a=18 b= 9 c=30 b>c? 交换 b中放的是b 和 c 中小的数,c中放的是bc中大的数. 如果a<b,则输出

字符串的输入问题

字符串的输入问题: 1.    格式化输入函数:scanf("格式字符串", 地址);.将用户输入的数据与格式化字符串进行匹配, 将匹配到的数据赋值给地址所在的内存,使用 %s 作为字符串的格式,需要注意的是,当输入的字符超过数组长度时就会覆盖掉与该数组所占内存相邻的内存中的其他数据.而且有时系统不会报错.假如定义一个长度为5的char 型字符串数组,当输入12345abc时如下图模拟内存空间: 2.    其他输入字符串函数介绍: (1).    gets(数组名或者&变量名

Java中从键盘输入的三种方法

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class EnterTest { public static void main(String[] args) { //主方法 CharTest(); //调用System.in方法 ReadTest(); //调用ReadTest方法 Scan

iOS中字符串转float类型失真的解决办法

最近在做项目的过程中,偶然遇到了一个问题,就是字符串和浮点类型的转换.以往都是通过[NSString stringWithFormat:@"%d",goodcount]这种方式转换,并没有太在意.今天一个项目中的客户反馈在输入很长的数字后,浮点类型的数据显示和输入的不一致.经过反复的测试发现,原来浮点类型的float只能支持到8位,也就是说12345678这样的数字通过float类型是没有问题的,但是如果超过八位以后NSString *[email protected]"12

JS中字符串的相关操作

(转自:http://www.cnblogs.com/zhaoxinxin/articles/1402733.html) 一.字符串的创建 创建一个字符串有几种方法. 最简单的是用引号将一组字符包含起来,可以将其赋值给一个字符串变量. var myStr = "Hello, String!"; 可以用双引号或单引号将字符串包含,但要注意,作为界定字符串的一对引号必须是相同的,不能混用. 像var myString = "Fluffy is a pretty cat.'; 这样

C/C++中字符串String及字符操作方法

本文总结C/C++中字符串操作方法,还在学习中,不定期更新... 字符串的输入方法 1.单个单词可以直接用std::cin,因为:std::cin读取并忽略开头所有的空白字符(如空格,换行符,制表符),读取字符直至再次遇到空白字符,读取终止.所以cin只能读取单个单词.显然可以多次使用cin来获取多个单词: 2.多个单词使用函数std::getline(std::cin, s)请看下面代码: #include <iostream> #include <string> int mai