| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3269 人关注过本帖
标题:随便输入,会出现一个问号,是为什么啊?实在不解。
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
剛才測試了一下你這個代碼,是有點古怪。我用的VS2010,scanf()函數接收你那些數據,是混亂的(我已經把你printf()的中文逗號改掉了,如果說出問號的話,多數是這些中文字符造成的),比如輸入asd,接收後的是adx,無論輸入什麼,ch3都是'x'。但用安全函數scanf_s(),卻一切正常,不初始化ch2時它是'x',初始化了是我設定的值'u'。用scanf()即使初始化ch2也沒用,此時ch3='x'。

我不知道你是什麼編譯器,如果別人有別的編譯器,不妨也試試看。

授人以渔,不授人以鱼。
2012-01-28 15:55
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
收藏
得分:1 
回复 7楼 TonyDeng
我觉得如果把你说的ch2改成ch3就可以理解了……其实我也不懂,猜测……猜测……

思考不应该由他人来指导,会思考的人不需要你来提醒他去思考一个简单的问题。
2012-01-28 16:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不管它了,我極少用scanf()之類函數的,要用也不會是這種用法。這個問題留給有興趣的人研究吧。

授人以渔,不授人以鱼。
2012-01-28 16:35
chihuyu
Rank: 2
等 级:论坛游民
帖 子:70
专家分:13
注 册:2011-12-26
收藏
得分:0 
嗯,好的,先不研究了,我用的是vc 6.0。还是非常感谢大家的回答。谢谢
2012-01-28 21:31
xs47968224
Rank: 2
等 级:论坛游民
帖 子:18
专家分:52
注 册:2010-3-11
收藏
得分:1 
#include"stdio.h"
void main()
{
    char ch1,ch2,ch3;
    scanf("%c%*c%c",&ch1,&ch2,&ch3,&ch3);
    printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);

}
都没用过%*c吗?我来说一下我理解的浅见吧,%*c是跳过一个字符,就是你输入任何一个字符,也不会赋给ch2,到你输第三个字符的时候,才赋给ch2,但当你输第四个字符的时候scanf里面只有三个值的赋值,所以,第四个字符不会被读取,而这时,输出ch3的值,因为没有初值,是看内存定的,如果CPU里那段内存是问号,那就是问号,你可以试试这样写
#include"stdio.h"
void main()
{
    char ch1,ch2,ch3;
    scanf("%c",&ch1,&ch2,&ch3);
    printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);

}

scanf里面只用一个%c,再输出,看ch2跟che3值,都是未定义的值,所以,其实你上面那段scanf,实际就是两个%c,总结一下,%*c跟%c是两回事,%*c是跳过读取一个字符。

#include"stdio.h"
void main()
{
    char ch1,ch2,ch3;
    scanf("%c%*c%c",&ch1,&ch2,&ch3,&ch3,&ch3);//也可以后面多加一个ch3读取,你就知道了,第二个你输入的字符,是被跳过,并未读取。我们当作忽略吧
    printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);

}

如果再不懂,可能是我表达的不好。。。组织能力有限,浅见,勿喷


欢迎来访-> 小Z博客
2012-01-28 21:57
xs47968224
Rank: 2
等 级:论坛游民
帖 子:18
专家分:52
注 册:2010-3-11
收藏
得分:0 
#include"stdio.h"
void main()
{
    char ch1,ch2,ch3;
    scanf("%c%*c%c%c",&ch1,&ch2,&ch3);
    printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);

}
第二个写错了,你多加个%c,补齐3个%c,输入四个字符,那三个ch就都有值了,但第二个字符是被跳过的,第三个赋值给ch2,第四个值赋给ch3

欢迎来访-> 小Z博客
2012-01-28 22:09
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:1 
%*c表示从输入数据中读取有效数据并废弃(不将其赋给某个变量)。

梅尚程荀
马谭杨奚







                                                       
2012-01-30 10:07
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:1 
回复 15楼 xs47968224
LZ的程序不管输入多少字符ch3都没有值,如果再加个ch4并读取也是如此,最后一个变量都没有读进。如果初始化就是初始化的值

酱油实习生
2012-01-30 11:55
elvis_sun
Rank: 2
等 级:论坛游民
帖 子:5
专家分:15
注 册:2012-1-30
收藏
得分:1 
关键问题在*上,%*c 会忽略掉一个字符,并且不会给任何变量赋值,因此scanf("%c%*c%c",&ch1,&ch2,&ch3)等同于scanf("%c%c",&ch1,&ch2,&ch3),所以ch3没有机会被赋值。
2012-01-30 12:41
yxiangyxiang
Rank: 3Rank: 3
来 自:/\/\/\/\/
等 级:论坛游侠
帖 子:130
专家分:186
注 册:2012-1-29
收藏
得分:0 
你的printf("ch1=%c,ch2=%c,ch3=%c\n", ch1, ch2, ch3);这了的逗号不是标准的英文逗号,而是某种输入法的逗号,
改了就好,还有就是在输入ch1,ch2,ch3,的时候中间不能有空格,会被系统认为字符接受的
2012-02-01 22:56
快速回复:随便输入,会出现一个问号,是为什么啊?实在不解。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049150 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved