黑马程序员技术交流社区

标题: scanf 的书写问题 [打印本页]

作者: rina_2010    时间: 2016-3-17 22:54
标题: scanf 的书写问题
        输入要保存的信息时, scanf("%s  %s",contacts[i].name,contacts[i].telNo); 中%s 前为什么不能加name:

,还有为什么%s后不能加\n? 而printf("name:%s telNo:%s\n",contacts[i].name,contacts[i].telNo);都可以。
   
     请高人指点,谢谢!
作者: 米阳    时间: 2016-3-17 23:00
只记得printf函数中"XXX"之间的东东是原样输出的 , scanf函数不能用\n可能是因为自己还要敲回车吧 , 看看哪位大神给详解吧
作者: 叫我超哥    时间: 2016-3-18 00:02
scanf允许任何除\0以外的格式控制字符,但这与他的三个分割符又冲突(\n,\t,空格),所以尽量不要出在格式控制参数里出现这三个字符。当你scanf("%s\n"),输入后回车时scanf将得到输入内容但是scanf又发现你让他再等待一个\n他就继续等你的输入。当你又按了一个回车,scanf发现上一个分割符跟这个分割符中间没有内容,直接跳过。到你在输入内容然后回车时,scanf发现下一个字符不是\n,认为是非法输入。下面的内容将留在缓冲区,函数返回。
作者: rina_2010    时间: 2016-3-23 20:45
谢谢楼上人员的回复,本人在复习中找到了正解,以下是分析:

int age;                                                                                                                                                   scanf("age=%d\n",&age);                                                                                                                 printf("age=%d\n", age)

在控制台输入age=45\n就能打印出来。双引号“    ”中输入的是格式控制字符串,一定要按照要求的格式去输入内容。估计是写习惯了printf所致吧,最好还是要把这两个区分开来,后续按照scanf("%d",&age);去书写。
作者: 张立鹏    时间: 2016-3-23 22:23
在scarf函数中双引号中的部分会和用户输入的进行比较,例如%d对应整形数据,而其他的字符如‘\n’在这里不会被当做转义字符,而是会被当做两个字符去匹配用户输入的值,如果用户没有输入“\”和“n”则程序运行时会受到影响,不能正常运行
作者: 332439409    时间: 2016-3-23 23:21

作者: 爱尘iPhone    时间: 2016-3-24 21:33
一个是占位符 其他的就是打印的文字 不必在这上面纠结 就当做是固定语法用
作者: rina_2010    时间: 2016-4-15 19:07
Thank you for your attention.
作者: 毛小猪    时间: 2016-4-15 23:25
如果在scanf中加入了"\n",那么在控制台输入的时候ye'ya也要写上"\n"




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2