scanf (“%s”,name)与scanf (“%c”,&name) 有什么分别。

发布网友 发布时间:2024-10-23 02:27

我来回答

5个回答

热心网友 时间:2024-10-23 10:18

scanf (“%s”,name)是输入字符串到name字符数组,而scanf (“%c”,&name) 是输入字符到name字符数组的第一个元素。

如果scanf (“%s”,&name) 会报错,因为scanf()函数中,“%s”代表对字符串格式化,需要提供的参数必须是字符数组,&name仅仅是name变量的第一个单元空间。

如果scanf (“%c”,name)也会报错,因为“%s”代表对字符进行格式化,需要提供变量的地址,所以不能没有&符号。

scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

扩展资料:

输入字符串的另一个函数gets()和scanf的区别:

gets(s)函数与scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。

也就是说gets()函数读取到\n(我们输入的回车)于是停止读取,但是它不会把\n包含到字符串里面去。然而,和它配合使用的puts函数,却在输出字符串的时候自动换行。

参考资料来源:百度百科-scanf (计算机语言函数)

热心网友 时间:2024-10-23 10:19

scanf (“%s”,name)——从键盘接收一个字符串,存储到以name为首地址的数组中;
scanf (“%c”,&name) ——从键盘接收一个字符,赋给变量name;如果name是数组名,则将其低字节赋以从键盘输入的字符的ASCII码。由于逻辑错误,常常导致安全问题。

scanf (“%c”,name)——从键盘接收一个字符,赋给指针name所指的变量;若name是数组名,则接收的字符被存储到name[0]中。
scanf (“%s”,&name)——(如果name是数组名)从键盘接收一个字符串,存储到以name为首地址的数组中(注意这里虽意义与scanf (“%s”,name)不同,但效果与scanf (“%s”,name)一样);

热心网友 时间:2024-10-23 10:19

对于这一句:

“  scanf (“%s”,&name)——(如果name是数组名)从键盘接收一个字符串,存储到以name为首地址的数组中(注意这里虽意义与scanf (“%s”,name)不同,但效果与scanf (“%s”,name)一样);   ”

我表示深深怀疑,虽然没有直接测试。很可能有错,希望自己去写代码实验一下。

====== 以下为我的 update =======

以前水平比较菜,scanf 用得也不多;看到现在还有人看这类问题,我再补充一下 

关键点:scanf “必须”接受指针;char arr[9] = {'\0'}; 这句代码,“arr”变量直接使用,它就是一个指针

&arr 也是指针,但是 &arr 是指向指针的指针。

所以针对我的回答,这里做个确定的补充, 

scanf("%s", &name);

 scanf("%s", name);

两者都可以编译通过,因为 scanf 的第二个参数只要是指针就可以,

但是,敲黑板!千万不要使用 scanf("%s", &name) 这种方式,除!非!你!知! 道!你!在!干!什!么!,因为这会造成 C语言上经常会发生的指针越位问题。 

---------

最后,对于C语言指针这个对初学者很难懂的内容,建议翻阅 “征服C指针”一书。大概看懂3,4章,你对C语言就算真正入门了。

By the way,初学者在代码里,如果有重复对一个数组赋值使用的情况,建议不管三七二十一使用 memset() 过度使用也没有关系(对初学者而言),好的习惯可以让学习之路更顺利一点。

热心网友 时间:2024-10-23 10:20

scanf()中,需要变量的地址,不是变量名称。因为name是数组,所以scanf (“%s”,name);是对的。

而scanf (“%s”,&name);是错的,错在name前的取址符'&'。

scanf (“%c”,name);是对的,但每次只能读入一个字符。

热心网友 时间:2024-10-23 10:21

因为name是数组,所以name相当于&name[0](首地址),所以scanf(%c,name)是对的。scanf(
%s,name)和scanf(%s,&name[0])也是对的
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com