scanf ("%c%1s",&c1,&c2);
输入:string c
结果是什么,为什么?
31 个解决方案
#1
up
#2
编译能通过吗?&c1?
#3
看来我水平太差,不过现在也没法试试。
#4
打错了,是c1,没有&
#5
你的这个代码有问题呀。
首先%c &c1 就是说只给c1[0]赋值咯?
然后又让c2接受一个%s的赋值。。
因为c1[0] = s ... 而其他部分。。。都是未知的数值。。所以肯定显示乱码。
c2是t
首先%c &c1 就是说只给c1[0]赋值咯?
然后又让c2接受一个%s的赋值。。
因为c1[0] = s ... 而其他部分。。。都是未知的数值。。所以肯定显示乱码。
c2是t
#6
打错了,是c1,没有&
也是一样的吧
也是一样的吧
#7
没有环境,我想应该是:
c1[0]里是'g',
c2里是'c'。
c1[0]里是'g',
c2里是'c'。
#8
不知道你想要什么?按照你的代码,我的输出语句 printf("\n%c%ls",c1,c2); 输出的结果是乱码,不知是不是我没做对;另外,c1是字符串,对字符串赋值好像不应该像你这样做吧,而应该每个数组元素单独赋值,或者好像可以用 %s ,你试试看。
#9
main()
{
char c1[20],c2;
scanf("%s %c",&c1,&c2);
printf("\n%s%c",c1,c2);
getch();
}
输入 string c
输出 string c
{
char c1[20],c2;
scanf("%s %c",&c1,&c2);
printf("\n%s%c",c1,c2);
getch();
}
输入 string c
输出 string c
#10
楼上错误
scanf("%s %c",&c1,&c2);
~~~~应该是c1或者&c1[0]
scanf("%s %c",&c1,&c2);
~~~~应该是c1或者&c1[0]
#11
根本就是内存越界的东西。根本就不应该讨论这种代码的运行情况,这种代码运行的结果是没有定义的。
#12
to peter:你可以试试看,我记得 &c1 就是取c1字符串的首元素的地址,就是说相当于%c1[0]的效果;当然,因为我毕业后就几乎没编过程了,不排除是我记得不对,但我上面的代码确实能运行,并能得到这个结果。
#13
运行没有问题 我也试验过的 。可是应该不太规范吧
我不太清楚
请高手赐教
我不太清楚
请高手赐教
#14
main()
{
char c1[20],c2;
scanf("%c%1s",&c1,&c2);
printf("\n%s;%c",c1,c2);
getch();
}
大家可以用这个程序试试。
输入:string c
输出:s;t
为什么呢?看“scanf("%c%1s",&c1,&c2)”中第一个变量:c1==c1[0],那么&c1==&c1[0],c1[0]是char型,那么scanf("%c",&c1[0])有什么错误?那么将输入缓冲的第一个字符's'被放入c1[0]。此时,因为有一个%c被放入变量,scanf该处理下一个%1s了,同时变量地址指向&c2。%1s:一个字符长的字符串,c2:char型,也是一个字符长,相符合,那么将输入缓冲的第二个字符't'放入c2,条件满足,scanf退出。
因此,c1[0]=='s',即字符串c1=="s"(这要看编译器,有的在char c1[20]时会自动将这20个字符全清零,有的不会。这里只说清零的情况,不清零输出时就会造成乱码的情况,这不影响本说明),c2='t',输出:s;t。
我认为楼主提出这样的问题很好,是应该讨论讨论!浮躁是学不到知识的。
下面这个帖子和本帖类似,希望大家也看看,有好处的:
http://community.csdn.net/Expert/topic/3056/3056788.xml?temp=.1162378
{
char c1[20],c2;
scanf("%c%1s",&c1,&c2);
printf("\n%s;%c",c1,c2);
getch();
}
大家可以用这个程序试试。
输入:string c
输出:s;t
为什么呢?看“scanf("%c%1s",&c1,&c2)”中第一个变量:c1==c1[0],那么&c1==&c1[0],c1[0]是char型,那么scanf("%c",&c1[0])有什么错误?那么将输入缓冲的第一个字符's'被放入c1[0]。此时,因为有一个%c被放入变量,scanf该处理下一个%1s了,同时变量地址指向&c2。%1s:一个字符长的字符串,c2:char型,也是一个字符长,相符合,那么将输入缓冲的第二个字符't'放入c2,条件满足,scanf退出。
因此,c1[0]=='s',即字符串c1=="s"(这要看编译器,有的在char c1[20]时会自动将这20个字符全清零,有的不会。这里只说清零的情况,不清零输出时就会造成乱码的情况,这不影响本说明),c2='t',输出:s;t。
我认为楼主提出这样的问题很好,是应该讨论讨论!浮躁是学不到知识的。
下面这个帖子和本帖类似,希望大家也看看,有好处的:
http://community.csdn.net/Expert/topic/3056/3056788.xml?temp=.1162378
#15
学习!
#16
不错~~没什么可以补充的~~
#17
他的师没输入的!!
#18
只要理解清了%C与%S两个的含义以及字符数组应该以"\0"结尾,就应该知道程序输出的结果。
#19
char c1[20],c2;
scanf ("%c%1s",&c1,&c2);
printf("\n%s;%c",c1,c2);
输入:string c
输出: s;t
scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。
其调用格式为:
scanf("<格式化字符串>", <地址表>);
格式化字符串包括以下三类不同的字符;
1. 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。
2. 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多
个空白字符。
3. 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非
空白字符相同的字符。
地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数
完全不同, 要特别注意。各个变量的地址之间同","分开。
scanf ("%c%1s",&c1,&c2);
printf("\n%s;%c",c1,c2);
输入:string c
输出: s;t
scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。
其调用格式为:
scanf("<格式化字符串>", <地址表>);
格式化字符串包括以下三类不同的字符;
1. 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。
2. 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多
个空白字符。
3. 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非
空白字符相同的字符。
地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数
完全不同, 要特别注意。各个变量的地址之间同","分开。
#20
这个是不是你们老师出的??
你们老师在整你耶
你们老师在整你耶
#21
内存泄漏,如果考虑缓冲区溢出攻击的话还有些价值
要么就是研究C语言内部的结构
要么就是研究C语言内部的结构
#22
内存泄漏,如果考虑缓冲区溢出攻击的话还有些价值
此话怎讲?高手指点
此话怎讲?高手指点
#23
#include<stdio.h>
int main(void) {
char static c1[20],c2;
scanf ("%c%ls",&c1,&c2);
printf("%s;%c\n",c1,c2);
printf("%c",&c1);/* 输出在static下 输出是空的 */
return 0;
}
输入string c
输出
s;t
更改输入&cl也没有改变
如果改成
#include<stdio.h>
int main(void) {
char c1[20],c2;
scanf ("%c%ls",&c1,&c2);
printf("%s;%c\n",c1,c2);
printf("%c",&c1);
return 0;
}
输入string c
输出
;t
H
而不用static状态,即使你更改输入 cl的输出还是H
int main(void) {
char static c1[20],c2;
scanf ("%c%ls",&c1,&c2);
printf("%s;%c\n",c1,c2);
printf("%c",&c1);/* 输出在static下 输出是空的 */
return 0;
}
输入string c
输出
s;t
更改输入&cl也没有改变
如果改成
#include<stdio.h>
int main(void) {
char c1[20],c2;
scanf ("%c%ls",&c1,&c2);
printf("%s;%c\n",c1,c2);
printf("%c",&c1);
return 0;
}
输入string c
输出
;t
H
而不用static状态,即使你更改输入 cl的输出还是H
#24
up
#25
好模糊啊
#26
printf("%c",&c1);
------------------------------------
将c1的地址按照字符型显示出来??这会显示什么呢?
------------------------------------
将c1的地址按照字符型显示出来??这会显示什么呢?
#27
好象题不对!
#28
对于LearnAndStudy(c@ini@o) 的回复。。。好象不太懂
#29
哈哈,c1[20]跟c2在内存中是相邻的。一般的编译器会把c2放在低的地址,c1[20]在后面。不用我说结果了吧。
#30
我刚刚学习c,看不懂地说
#31
UP
#1
up
#2
编译能通过吗?&c1?
#3
看来我水平太差,不过现在也没法试试。
#4
打错了,是c1,没有&
#5
你的这个代码有问题呀。
首先%c &c1 就是说只给c1[0]赋值咯?
然后又让c2接受一个%s的赋值。。
因为c1[0] = s ... 而其他部分。。。都是未知的数值。。所以肯定显示乱码。
c2是t
首先%c &c1 就是说只给c1[0]赋值咯?
然后又让c2接受一个%s的赋值。。
因为c1[0] = s ... 而其他部分。。。都是未知的数值。。所以肯定显示乱码。
c2是t
#6
打错了,是c1,没有&
也是一样的吧
也是一样的吧
#7
没有环境,我想应该是:
c1[0]里是'g',
c2里是'c'。
c1[0]里是'g',
c2里是'c'。
#8
不知道你想要什么?按照你的代码,我的输出语句 printf("\n%c%ls",c1,c2); 输出的结果是乱码,不知是不是我没做对;另外,c1是字符串,对字符串赋值好像不应该像你这样做吧,而应该每个数组元素单独赋值,或者好像可以用 %s ,你试试看。
#9
main()
{
char c1[20],c2;
scanf("%s %c",&c1,&c2);
printf("\n%s%c",c1,c2);
getch();
}
输入 string c
输出 string c
{
char c1[20],c2;
scanf("%s %c",&c1,&c2);
printf("\n%s%c",c1,c2);
getch();
}
输入 string c
输出 string c
#10
楼上错误
scanf("%s %c",&c1,&c2);
~~~~应该是c1或者&c1[0]
scanf("%s %c",&c1,&c2);
~~~~应该是c1或者&c1[0]
#11
根本就是内存越界的东西。根本就不应该讨论这种代码的运行情况,这种代码运行的结果是没有定义的。
#12
to peter:你可以试试看,我记得 &c1 就是取c1字符串的首元素的地址,就是说相当于%c1[0]的效果;当然,因为我毕业后就几乎没编过程了,不排除是我记得不对,但我上面的代码确实能运行,并能得到这个结果。
#13
运行没有问题 我也试验过的 。可是应该不太规范吧
我不太清楚
请高手赐教
我不太清楚
请高手赐教
#14
main()
{
char c1[20],c2;
scanf("%c%1s",&c1,&c2);
printf("\n%s;%c",c1,c2);
getch();
}
大家可以用这个程序试试。
输入:string c
输出:s;t
为什么呢?看“scanf("%c%1s",&c1,&c2)”中第一个变量:c1==c1[0],那么&c1==&c1[0],c1[0]是char型,那么scanf("%c",&c1[0])有什么错误?那么将输入缓冲的第一个字符's'被放入c1[0]。此时,因为有一个%c被放入变量,scanf该处理下一个%1s了,同时变量地址指向&c2。%1s:一个字符长的字符串,c2:char型,也是一个字符长,相符合,那么将输入缓冲的第二个字符't'放入c2,条件满足,scanf退出。
因此,c1[0]=='s',即字符串c1=="s"(这要看编译器,有的在char c1[20]时会自动将这20个字符全清零,有的不会。这里只说清零的情况,不清零输出时就会造成乱码的情况,这不影响本说明),c2='t',输出:s;t。
我认为楼主提出这样的问题很好,是应该讨论讨论!浮躁是学不到知识的。
下面这个帖子和本帖类似,希望大家也看看,有好处的:
http://community.csdn.net/Expert/topic/3056/3056788.xml?temp=.1162378
{
char c1[20],c2;
scanf("%c%1s",&c1,&c2);
printf("\n%s;%c",c1,c2);
getch();
}
大家可以用这个程序试试。
输入:string c
输出:s;t
为什么呢?看“scanf("%c%1s",&c1,&c2)”中第一个变量:c1==c1[0],那么&c1==&c1[0],c1[0]是char型,那么scanf("%c",&c1[0])有什么错误?那么将输入缓冲的第一个字符's'被放入c1[0]。此时,因为有一个%c被放入变量,scanf该处理下一个%1s了,同时变量地址指向&c2。%1s:一个字符长的字符串,c2:char型,也是一个字符长,相符合,那么将输入缓冲的第二个字符't'放入c2,条件满足,scanf退出。
因此,c1[0]=='s',即字符串c1=="s"(这要看编译器,有的在char c1[20]时会自动将这20个字符全清零,有的不会。这里只说清零的情况,不清零输出时就会造成乱码的情况,这不影响本说明),c2='t',输出:s;t。
我认为楼主提出这样的问题很好,是应该讨论讨论!浮躁是学不到知识的。
下面这个帖子和本帖类似,希望大家也看看,有好处的:
http://community.csdn.net/Expert/topic/3056/3056788.xml?temp=.1162378
#15
学习!
#16
不错~~没什么可以补充的~~
#17
他的师没输入的!!
#18
只要理解清了%C与%S两个的含义以及字符数组应该以"\0"结尾,就应该知道程序输出的结果。
#19
char c1[20],c2;
scanf ("%c%1s",&c1,&c2);
printf("\n%s;%c",c1,c2);
输入:string c
输出: s;t
scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。
其调用格式为:
scanf("<格式化字符串>", <地址表>);
格式化字符串包括以下三类不同的字符;
1. 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。
2. 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多
个空白字符。
3. 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非
空白字符相同的字符。
地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数
完全不同, 要特别注意。各个变量的地址之间同","分开。
scanf ("%c%1s",&c1,&c2);
printf("\n%s;%c",c1,c2);
输入:string c
输出: s;t
scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。
其调用格式为:
scanf("<格式化字符串>", <地址表>);
格式化字符串包括以下三类不同的字符;
1. 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。
2. 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多
个空白字符。
3. 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非
空白字符相同的字符。
地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数
完全不同, 要特别注意。各个变量的地址之间同","分开。
#20
这个是不是你们老师出的??
你们老师在整你耶
你们老师在整你耶
#21
内存泄漏,如果考虑缓冲区溢出攻击的话还有些价值
要么就是研究C语言内部的结构
要么就是研究C语言内部的结构
#22
内存泄漏,如果考虑缓冲区溢出攻击的话还有些价值
此话怎讲?高手指点
此话怎讲?高手指点
#23
#include<stdio.h>
int main(void) {
char static c1[20],c2;
scanf ("%c%ls",&c1,&c2);
printf("%s;%c\n",c1,c2);
printf("%c",&c1);/* 输出在static下 输出是空的 */
return 0;
}
输入string c
输出
s;t
更改输入&cl也没有改变
如果改成
#include<stdio.h>
int main(void) {
char c1[20],c2;
scanf ("%c%ls",&c1,&c2);
printf("%s;%c\n",c1,c2);
printf("%c",&c1);
return 0;
}
输入string c
输出
;t
H
而不用static状态,即使你更改输入 cl的输出还是H
int main(void) {
char static c1[20],c2;
scanf ("%c%ls",&c1,&c2);
printf("%s;%c\n",c1,c2);
printf("%c",&c1);/* 输出在static下 输出是空的 */
return 0;
}
输入string c
输出
s;t
更改输入&cl也没有改变
如果改成
#include<stdio.h>
int main(void) {
char c1[20],c2;
scanf ("%c%ls",&c1,&c2);
printf("%s;%c\n",c1,c2);
printf("%c",&c1);
return 0;
}
输入string c
输出
;t
H
而不用static状态,即使你更改输入 cl的输出还是H
#24
up
#25
好模糊啊
#26
printf("%c",&c1);
------------------------------------
将c1的地址按照字符型显示出来??这会显示什么呢?
------------------------------------
将c1的地址按照字符型显示出来??这会显示什么呢?
#27
好象题不对!
#28
对于LearnAndStudy(c@ini@o) 的回复。。。好象不太懂
#29
哈哈,c1[20]跟c2在内存中是相邻的。一般的编译器会把c2放在低的地址,c1[20]在后面。不用我说结果了吧。
#30
我刚刚学习c,看不懂地说
#31
UP