scanf和gets读取字符串

最关键的是scanf返回值是整数型,while(scanf()!=EOF)

而gets返回的是指针while(gets()!=NULL)

1. scanf 函数是有返回值的,它的返回值可以分成三种情况
  1) 正整数,表示正确输入参数的个数。例如执行 scanf("%d %d", &a, &b);
      如果用户输入"3 4",可以正确输入,返回2(正确输入了两个变量);
      如果用户输入"3,4",可以正确输入a,无法输入b,返回1(正确输入了一个变量)。    
  2) 0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入",3 4",返回0。
  3) EOF,这是在stdio.h里面定义的常量(通常值为-1),表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复2次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。

scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。

gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。

char string[15]; gets(string); /*遇到回车认为输入结束*/

scanf("%s",string); /*遇到空格认为输入结束*/

所以在输入的字符串中包含空格时,应该使用gets输入。

scanf和gets获取字符串时的区别

在C语言中,能构获取字符串的函数至少有两个:

1.scanf()

所在头文件:stdio.h

语法:scanf("格式控制字符串",变量地址列表);

接受字符串时:scanf("%s",字符数组名或指针);

2.gets()

所在头文件:stdio.h

语法:gets(字符数组名或指针);

两者在接受字符串时:

1.不同点:

scanf不能接受空格、制表符Tab、回车等;

而gets能够接受空格、制表符Tab和回车等;

2.相同点:

字符串接受结束后自动加‘\0‘。

例1:

#include <stdio.h>

main()

{

char ch1[10],ch2[10];

scanf("%s",ch1);

gets(ch2);

}

依次键入asd空格fg回车,asd空格fg回车,则ch1="asd\0",ch2="asd fg\0"。

例2:

#include <stdio.h>

main()

{

char ch1[10],ch2[10],c1,c2;

scanf("%s",ch1);

c1=getchar();

gets(ch2);

c2=getchar();

}

依次键入asdfg回车,asdfg回车,则ch1="asdfg\0",c1=‘\n‘,ch2="asdfg\0",c2需输入。

scanf :当遇到回车,空格和tab键会自动在字符串后面添加‘\0‘,但是回车,空格和tab键仍会留在输入的缓冲区中。

gets:可接受回车键之前输入的所有字符,并用‘\n‘替代 ‘\0‘.回车键不会留在输入缓冲区中

gets()用到读取字符串,用回车结束输入

scanf()可以读取所有类型的变量

(转载自:http://leoenglish.blog.163.com/blog/static/1750319852011296336486/)感谢

时间: 2024-11-10 00:12:21

scanf和gets读取字符串的相关文章

scanf() & gets() & fgets() 读取字符串的区别

scanf()和gets()读取字符串的区别 主要的差别在于它们如何决定字符串何时结束 scanf()更基于获取单词(get word)而不是获取字符串(get string): gets()会读取所有的字符,直到遇见第一个换行符为止. scanf()使用两种方法决定输入结束. 如果使用%s格式,字符串读到(但不包括)下一个空白字符(比如空格.制表符或换行符) 如果指定了字段宽度,比如%10s,scanf()就会读入10个字符或者直到遇见第一个空白字符,由二者中最先满足的那一个终止输入 注:无论

scanf与gets读取字符串的区别

对于编程初学者很多人对gets和scanf都没做过深入的了解,本文为大家详细说明gets和scanf的区别 gets 1.函数:gets(字符指针) 2.头文件:stdio.h(c中),c++不需包含此头文件 3.原型:char*gets(char*buffer); 4.功能:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中.注意:(换行符不作为读取串的内容,读取(接受)的换行符被转换为null值,并由此来结束字符串.) 5.返回

scanf 和 gets 读取字符串

深入了解scanf()/getchar()和gets()等函数 scanf与gets函数读取字符串的区别 今天看到一段话,大致是说gets比scanf()快,有点吃惊,搜了一下,scanf()和gets的区别大致有着几条: 1.scanf() 会忽略行开头的所有空格,并以空格.换行符结束输入: 使用getchar()读取scanf语句执行后,缓冲区留下的换行符, gets读入以任何字符开始的字符串,以换行符结束,但之后会丢弃换行符并以'\0'代替: 2. 在数据大量的情况下,用gets读取快于s

关于C中scanf()函数读取字符串的问题

1 #include <stdio.h> 2 3 int main(void) 4 { 5 char s_name[20]; 6 7 scanf("%s", s_name); 8 printf("Hello, %s!\n", s_name); 9 10 return 0; 11 } 对于这段简单的代码,如果输入一个名字如:Stephen,很容易知道,其输出为: Hello, Stephen! 这个很容易理解,但是输入更完整的名字如:Stephen Pra

A + B------HDOJ杭电1228(读取字符串练基础)

Problem Description 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. Input 测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出. Output 对每个测试用例输出1行,即A+B的值. Sample Input one + two = three four + five six = zero seven + eig

java基础---&gt;文件---&gt;从标准输入读取字符串作为文件名----&gt;解决“文件名乱码”问题

概述:程序中有时会需要从标准输入读取字符串作为文件的名字,其具体实现方法有许多种.我第一次尝试编写这方面的程序时遇到了"乱码问题",后来使用了新的写法解决了乱码问题. /*原码,使用这种方法编写的代码会出现"乱码问题" 乱码原因分析:从标准输入读取的数据先被存放至byte[]中,之后又将byte数组转成String,这个过程中就会出现编码不一致的问题 如标准输入"file1",但是最终fileName=buffer.toString()的结果却是

scanf和fscanf读取文件

这篇是针对推箱子游戏而写的,某个时候在学C语言,最近转到windows设计,不知道是否有同样的感受,后面的东西学了,前面的就有点生疏了.其实,我的理解是,注意力转移了,当集中于当前问题的时候就会忽略以前的某些知识.这也说明,人的注意力是随着时间,学习内容的不同在起变化.但是,只要稍微复习一下就能很快恢复. 还是先提出一个问题讨论起来才比较直观.比如一个文本文件的内容如下: [1]00000000000000000000000000000000000000000000000000000111000

利用Python从文件中读取字符串(解决乱码问题)

首先声明这篇学习记录是基于python3的. python3中,py文件中默认的文件编码就是unicode,不用像python2中那样加u,比如u'中文'. 不过在涉及路径时,比如C:\Users\Administrator\Desktop\StudyNote\Python,还是要加r. eg:r'C:\Users\Administrator\Desktop\StudyNote\Python'. 因为\是转义符,想输出'\'得写成'\\'才可以.加了r就可以让python自动处理字符串,最终的字

C语言:scanf()语句错误读取

在上一星期的文章中,每一次遇到功能选择时,总是会以输入选项所代表的数字表示,而在让一个大神帮忙看看时,发现一个问题:当输入不是数字时scanf()语句将保持不读取状态,当程序运行到这里时scanf()将会维持上一次读取数,不读取新内容,检查了好久都不知道问题,当时大神发话,这绝对是scanf()读取出问题了,应当有一个函数可以清空缓存还是什么的,解决这个问题,结果回来一查,立即对大神佩服的五体投地. 以这个程序为例: #include int main() { int array[10]; in