关于数字 字符串的连续输入问题
关于数字 字符串的连续输入问题 笔记
-
Dargon
-
2020/11/01
-
所遇到的的重要的问题
-
教科书 来自:《C And Primer》第十四章
一直困扰我的问题while 和scanf 的一些操作
主要问题是 程序可以写好 当你将进行测试的时候,从键盘输入的时候 输入的方法不正确 要义ctrl +z来代表一次输入结束
对于使用scanf 函数进行连续输入数字 或者 字符的时候
1. while (scanf("%d", &n) ==1)
赋值失败,跳出循环,什么时候会赋值失败?
当你用键盘输入1 space 2 space 时候,相当于你输入一个到缓冲区
之后scanf 进行读取,读取成功就返回1 按下enter 键之后 还是照样会返回1 ,只有 当且 only just 输入ctrl + z
(文件结束符)时候 在按enter 之后才会读取错误 返回EOF 而不再是 1 while 结束.
正确的输入 应当输入一次 按下一次enter,代表本次结束。(前面的是因为自己在加上了if 限制 输入space 只读了 数字进来)
while( scanf ("%d", &i) ==1 ) {
if( i>=0 && i <size) {
array[i] ++;
}
}
2. while (scanf("%d", &n) !=EOF)
读到文件结尾时循环结束
ctrl +z
就是相当于输入了 EOF
while( scanf ("%d", &i) !=EOF ) {
if( i>=0 && i <size) {
array[i] ++;
}
}
3. while (scanf("%d", &n) ,n)
此时 括号里面的conditions 是逗号表达式 例如 x =(5, 6) 就相当于 x=6;
此时就相当于 判断n 的值的大小
也就是当你输入 0 的时候就会结束while
键盘输入的话 就不需要ctrl +z 来结束输入了,只有输入0 enter之后,就结束了
//这个是 当输入 -1 的时候,while 结束
while( scanf ("%d", &i), (i !=-1) ) {
if( i>=0 && i <size) {
array[i] ++;
}
}
当输入char 类型字符的时候
### 记一次坑逼的问题
- gets()函数的问题
经过测试自己的编译器,即使输入完成之后,按下enter之后,gets()还是不会反悔NULL指针,貌似和官方介绍的不一样啊!while( gets(input) != NULL )
官方介绍 char *gets(char *string)
gets() 函数从流中读取字符串,直到遇到换行符或文件结尾为止,最后加上NULL作为字符串结束,所读取的字符串暂存在给定的参数string中
返回值 若成功返回string指针,否则返回NULL
1. 利用gets() 函数
使用方法
char input[MAX_INPUT];
while( gets(input) != NULL ) {
printf("The Original Input : %s\n",input);
}
Note: 输入完成一串字符串之后,要在键盘上面输入 Ctrl + z 按下 Enter 来结束这次的输入,才能打印出来。
2. 利用getchar()函数
使用方法
进行单个字符的输入,
while( (ch =getchar()) !=EOF ) {
total ++;
for(category =0; category <N_CATEGORIES; category++) {
if( test_func[category] (ch) )
count[category] ++;
}
}
进行对单个 输入字符的操作, 连续输入结束之后 Ctrl +z(作为文件的结束符号) 来结尾,按下Enter 键结束while 循环