| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 893 人关注过本帖
标题:初学者遇到的奇怪小问题
只看楼主 加入收藏
zxcaaaaavvv
Rank: 1
等 级:新手上路
帖 子:20
专家分:7
注 册:2013-7-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:13 
初学者遇到的奇怪小问题
程序代码:
#include <stdio.h>
void main ()
{
printf ("请输入密码\n");
char a;
scanf ("%c",&a);
while(a!='zxc')

 {
     printf("错误");
     scanf("%c",&a);
                          }
printf ("欢迎");
}
这个小程序,调试一下会出现未声明a的报错,但是删去【printf ("请输入密码\n");】就没有报错了。请问这是为什么呢?
2013-07-20 11:21
umine
Rank: 2
等 级:论坛游民
帖 子:2
专家分:12
注 册:2013-7-20
收藏
得分:10 
c語言的最基本原則,參數只能在function的最前端出現
所以你的這兩行是錯的
printf ("请输入密码\n");
char a;

改成這樣就沒問題了
char a;
printf ("请输入密码\n");
2013-07-20 11:42
丶弱水彡千
Rank: 5Rank: 5
来 自:地狱十九层
等 级:职业侠客
威 望:2
帖 子:203
专家分:369
注 册:2013-6-16
收藏
得分:0 
  这也 太初了吧

这个怎么玩
2013-07-20 11:45
丶弱水彡千
Rank: 5Rank: 5
来 自:地狱十九层
等 级:职业侠客
威 望:2
帖 子:203
专家分:369
注 册:2013-6-16
收藏
得分:0 
这个明显的该用判断语句  你写个循环 这是要闹哪样?

这个怎么玩
2013-07-20 11:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
因为你的编译器太老旧了,不支持当今的C语言标准
2013-07-20 11:47
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:10 
以下是引用umine在2013-7-20 11:42:45的发言:

c語言的最基本原則,參數只能在function的最前端出現
所以你的這兩行是錯的
printf ("请输入密码\n");
char a;
 
改成這樣就沒問題了
char a;
printf ("请输入密码\n");

这未免也太儿戏了吧,你调试过了没有,a是字符,只能输入单个字符,楼主拿a与'zxc'比较有意义?请楼主告诉我'zxc'是单个字符,还是字符串?
程序代码:
#include <stdio.h>

 void main ()

 {
     char a;

 printf ("请输入密码\n");

 scanf ("%c",&a);

 while(a!='z')

 {
      printf("错误");
      scanf("%c",&a);
                           }

 printf ("欢迎");

 }
我只能说这段代码在运行的时候,如果第一次输入的是a,则会输出两个“错误”,至于为什么,我就不解释,我不确定我的解释是正确的,所以不多说,免得误导你,帮你顶一下,希望版主能对我提出的“为什么”感兴趣

思考赐予新生,时间在于定义
2013-07-20 12:27
zxcaaaaavvv
Rank: 1
等 级:新手上路
帖 子:20
专家分:7
注 册:2013-7-14
收藏
得分:0 
感谢二楼和六楼!我自己很多最基本的东西都没学好,还要劳烦你们来解释。谢谢!
2013-07-20 12:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 6楼 love云彩
你确认运行是怎样的现象了?

授人以渔,不授人以鱼。
2013-07-20 13:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你用下面的代码自己琢磨一下吧:
程序代码:
#include <stdio.h>

void main(void)
{
    char a;
    printf_s("请输入密码: ");
    fflush(stdin);
    printf_s("%d ", scanf_s("%c", &a, 1));
    printf_s("%c,%x\n", a, a);
    while (a != 'z')
    {
        printf_s("错误\n");
        printf_s("请输入密码: ");
        fflush(stdin);
        printf_s("%d ", scanf_s("%c", &a, 1));
        printf_s("%c,%x\n", a, a);
    }
    printf_s("欢迎");
    fflush(stdin);
    getchar();
}

授人以渔,不授人以鱼。
2013-07-20 13:49
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

就是不知道怎么解释为何会输出2个“错误”。
先执行第一条scanf语句,这是我输入a,然后进入while循环,先执行判断语句,a!='z',然后执行后面的printf("错误");这时候不是应该执行第二条scanf语句了吗?为何会再执行了一次printf("错误");如果按照编译器运行的顺序来看:首先是执行第一条scanf语句,然后到了while循环体,先执行循环体的语句,再执行判断语句,因为前面已经输入了a的值,所以不再执行第二条scanf语句,先是执行循环体printf语句,然后执行判断语句,第一次循环结束后,如果a!='z',则继续执行循环体里面的printf();这时才开始执行循环体里面的scanf语句,之后的整个过程都在while里面,直到输入正确为止才退出循环体。
这是我根据运行结果来解释整个过程,不知道正不正确

思考赐予新生,时间在于定义
2013-07-20 14:15
快速回复:初学者遇到的奇怪小问题
数据加载中...
 
   



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

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