有两个字符数组 a、b,则以下正确的输入语句是 A.scanf(“%s%s”,&a,&b);B.gets(a); gets(b);
scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#includeA错,是因为数组名就是地址,所以无需多此一举再在地址前加一个&来表示地址
scanf字符串 scanf字符串输入
scanf字符串 scanf字符串输入
scanf字符串 scanf字符串输入
scanf字符串 scanf字符串输入
这不是为了美观,1楼不要误人子弟。
B对,是表示从终端输入一个字符串到数组a中,并得到此字符数组的起始地址;()中的是字符数组名不是&a也不是字符串
如果写成
gets("a");gets("b");就是错误的
我写的代码:
#include
void main()
{char a[100],b[100];
scanf("%s%s",&a,&b);
printf("%s
}这样写输出没问题,我们学校考试题库也认为scanf("%s%s",&a,&b);这是对的。
B正确
A对地址取址所以出错了
只要区分数组名是个类似指针的东西就可以了。
B) is the answer;
a, b 本来就是地址, 不需要 &符号。
怎么用scanf ()把一个字符串读入一个数组
解决这一问题的最简单办法是在接收字符的scanf的控制符“%c”中的%前加一个空格写成“ %c”,把前一次输入遗留在输入缓冲区里的所有广义空格(' '、't'、'#include
#define SIZE 255
int main (void)
{char array[SIZE];
int i,index;
printf ("Enter words: ");
scanf ("%s",array);
printf ("%scanf("%c", &ch);sn",array);
return 1;
}这样就好了。
在DEV-C++中scanf函数可以从键盘接受多个字符串吗
而gets取得字符串时,是在遇到EOF(串尾)时停止,所以不存在这个问题。答:
如 scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。printf函数可以输出多个字符串,如printf("%s %sn",str1,str2);就输出两个字符串str1和str2。
puts函数可以输出“ ”,但不能输出‘ ’;后者要出错。
printf函数可以输出多个字符,如printf("%c %c %cn",'A','B','C');就输出3个字符A B C。
puts函数可以输出空格“字符串”,不能输出“空格字符”。
printf函数可以输出空格符,如printf("%cn",' ');就输出一个空格。
gets函数可以从键盘接受空格符,遇到'n'结束输入。
scanf函数可以从键盘接受空格符,如scanf("%c",&t);,当键入space时就把' '赋给了t。
gets函数不能从键盘接受多个字符串,只接收一个包含任何字符的串,当遇'n'时结束并换为'0'。
puts函数不能输出多个字符串,只输出一个字符串并在加一个'n'。
C语言中用scanf函数输入字符时,为什么要在输入控制符%c前面加空格?用scanf还有哪些要注意?
字符数组,那么数组名就表示首地址,所以就是B了,C选项都没有那个写法加空格屏蔽了空白字符。
使用scanf函数时应该注意的问题:
scan:扫描 f :format,格式
2、参数前面使用&符号,&号前要空格。
3、scanf输入语句中替换符后不能加空格,也不能加
4、scanf()中的变量必须使用地址。
5、scanf()的格式控制串可以使用空白字符或其它非空白字符,使用空白字符会使scanf()函数在读作中略去输入中的一个或多个空白字符。使用非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
6、在用"%c"输入时,空格和“转义字符”均作为有效字符。
(1)在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。
(2) 对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"作符。
(3) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读作中的位数。
(4) scanf函数中没有类似printf的精度控制。
如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。
(5) scanf中要求给出变量地址,如给出变量名则会出错
如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔。
比如scanf(" %c" ,&c);
你输入了' a'(a前面有个空格),a就能被c接受。但控制符前如果没空格,那c就接受了空格,明白了没?这个可以防止误作,忽略空格输入,接受个非空格输入。
在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include
它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
空格确实不是必须的,但有了空格就可以忽略你输入的空格。
例如:scanf(" %c" ,&c),你输入了' a'(a前面有个空格),a就能被c接受。
但控制符前如果没空格,那c就接受了空格,这个可以防止误作,忽略空格输入,接受个非空格输入。
注意事项:
对于scanf()而言,%c是个较为特殊的说明符。 %c前没空格,scanf()将读取标准输入流中的个字符,%c前有空格,scanf()则读取标准输入流中个非空白字符,屏蔽了空白字符。
扩展资料:scanf
C语言中常用的标准输入输出函数,它的常规用法是scanf(“输入格式”,输入地址),scanf从输入缓冲区取入数据按照指定的“输入格式”存储到指定的“输入地址”。
但是有一类问题通常令人头疼,那就是字符串的读入,此处仅仅讨论使用scanf读取字符串的一些问题。理论上你只需要定义一个字符指针,然后scanf每次读入字scanf("b=%d,y=%f,c2=%c",&b,&y,&c2);符存储到该指针所指的存储空间,之后指针值自动加1。
空格确实不是必须的,但有了空格就可以忽略你输入的空格,懂我的意思吗?
比如scanf(" %c" ,&c);
你输入了' a'(a前面有个空格),a就能被c接受。但控制符前如果没空格,那c就接受了空格,明白了没?这个可以防止误作,忽略空格输入,接受个非空格输入!
空格不是必须的,scanf("%c %c",a,b)只是提示在输入时两个字符必须有空格间开。如果是scanf("%c%c",a,b)那没两个输入字符不要有空格,不过编程时加上空格,这算一个书写规范吧,要不然如果你scanf("%s%s",a,b)系统可能区分不了你的字符串何时结束。
scanf接受键盘输入字符串后末尾是否自动加'0?'
printf("%sn", name);是的,自动就加上了
int main()int main(void)
{char s[100];
scanf("%s", s);
printf("%s", s);
}自动就加上了,不用担心
为什么在C语言中,用scanf输入字符串时,不需加&
句,是字符串数组定义, scanf %s 就是你键盘输入字符串, 输出的时候就是一堆字符串因为字符串变量名在 scanf 语句里 表示指针 (地址)
%c前没空格,scanf()将读取标准输入流中的个字符,%c前有空格,scanf()则读取标准输入流中个非空白字符。char s[80];
scanf("%s",s); --- 这里的s 已是地址。
当然,写成 scanf("%s",&s[0] ); 也可以, &s[0] 是地址。
用scanf输入数据到数组中需要加&吗?
可以观察到,arr[0]并未存入字符,t的数值比预期少1逐个输入数组中的数,是要用&的,但是如果是字符数组,以字符串形式整体输入,就不用,示例:
#include 原因:这种情况通常发生在前面已经有了输入语句,而当前的scanf是在接收字符(即用%c控制输入)时。由于前面的输入语句(不一定是scanf)把输入的' 改正错误之后的代码: #include int main() int t=0;如:scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。 scanf(“%d”,&n); char arr[n]; int i; for(i=0;i {scanf(“ %c”,&arr[i]); }printf(“%c for(i=0;i {if(arr[i]=='L') {t=t+1; {t=t-1; }} }将scanf中的%c变为 %c,得到预期结果。 c语言各种输出方法实例: main() {int a, b; scanf( “%d%d”, &a, &b ); printf( “%d+%d=%d printf( “%d-%d=%d printf( “%d%d=%d printf( “%d/%d=%d printf( “%d%%%d=%d getch(); } char name[50]; printf("input your name:"); scanf("%s", name); 下面是运行界面: input your name:apple apple Process returned 0 (0x0) execution time : 7.521 s Press any key to continue. 执行程序, 输入 apple 输出 apple scanf %c %c 的格式输入, 就是定义的单个字符的输入 char ch; printf("please input a character:"); printf("%cn", ch); 你键盘输入一个字符 a 屏幕打印一个字符 a 下面是运行界面: please input a character:a aProcess returned 0 (0x0) execution time : 6.135 s Press any key to continue. C语言的规定,就是单个字符用%c 格式输入控制符, 字符串的格式输入控制用%s 你完全可以运行一下, 初学不要想太多. 你应该学过最简单的 %d 控制符了吧, 就是十进制输入,输出控制符, C语言就规定, 你写%d, 我编译器就会当十进制输入输出. 你写其他的, 不是规定来的, 电脑也看不懂. 另外字符串数组, 输入字符串的时候, 不需要取地址符, 因为数组名就是地址, 是个地址常量. 不是变量. 楼下有个评论的兄弟, 也提到了. 这段话,你如果没学到数组, 而且没学到字符指针的话, 可以不用去看. 学到了的话,可以去考虑下, %s是指输入字符串 %c是指输入单个字符 %c是输入一个字符…… NULL是C语“2 (空格)3(tab) 4” 或 “2(tab)3(回车)4”等。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。言中预定义空指针的关键字,不是表示字符串。而且用指针指向字符串的时候,字符串要用英文的双引号引起来,如: char p = "Hello World!"; scanf函数是可以限制输入长度的,但scanf("%s",a)这种写法没有使用它的限制功能,所以是不检查字符串长度;C/C++也是不检查数组越界的。防止数组越界的任务完全由程序员事先安排完成;越界了就会产生不良或危险后果,正规软件中是不能允许的。正因为“不检查”,当越界作数组时,在越界部分没有受到“其他干扰”的情况下自然也能“正常”表现。你这里的问题是:要弄清作符sizeof和函数strlen的意义:作符sizeof是求参数的内存分配字节数,你这里为a分配了3个字节,所以输出是3;而函数strlen是求字符串长度,从字符串个字符开始,一个一个往后数,直到遇到'0'为止看经过了多少个字符,有几个字符,输出就是几(不包括'0')。scanf在接收字符串时要自动加一个'0',所以在6个A后有个'0',所以strlen计算出来是6。但有一点要说明,那就是你的运气好:因为你声明的长度是3,输入长度却是6,3个后面的字符是不可靠的,说不定被别人占用了它们所在的空间,那就不知道在什么地方才能“碰到“'0',那样的话由strlen计算出来的长度也就可能是个大于等于3的任何数……C语言中scanf的%s是什么意思,%c和%s有什么区别。会的进来,谢谢.
printf(“%d关于scanf里将得到的字符串赋给指针的地址?
char p;实际上是一个指针变量,而此时的指针p为空指针,如果你想要开辟一段内存空间存放数据,可以这样:char p[20]={0}; scanf("%s",p); printf("%s",p);输入一个未知长度的字符串数组 scanf
1、整数和小数分别使用使用控制符%d %lf 表示(float除外,用%f)。