| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4232 人关注过本帖
标题:for 循环的终止条件——不懂啊求教!
只看楼主 加入收藏
bbsy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-10-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:12 
for 循环的终止条件——不懂啊求教!
已知char input[40];

其中的for语句读取字符串过程如下:
for(i=0;input[i-1]!='\n';i++)
scanf("%c",&input[i]);

不懂这个循环,请问为什么循环终止条件是input[i-1]而不能是input[i]?
另外,为什么也不可以是!='\0'?不是说这个才是字符串结束的标志吗?
搜索更多相关主题的帖子: 字符串 
2015-10-14 23:09
bbsy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-10-14
收藏
得分:0 
尝试改过为input[i],但似乎就成了个死循环,一直在那输入、读取
2015-10-14 23:10
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:5 
结束标志是人为设定的,想开点


莫问前尘有愧,但求今生无悔
2015-10-14 23:57
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
关于那个 i,你自己理理清楚(可借助单步调试),1 楼所示代码有误,越界了


莫问前尘有愧,但求今生无悔
2015-10-15 00:02
bbsy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-10-14
收藏
得分:0 
感谢回复!
但是这个程序我有几处很不懂的,这个程序是老师给的,有关字符串的识别过程的。如下:
/*FA program */
#include<stdio.h>
int in(int s,int z)  //结束状态判断部分;程序 判断当前状态是否是结束状态,若是则返回标志1,否则返回0.
{
    if (s==z)
    {
    printf(" 3\n look!the last status belongs to Z!");
    return 1;
    }
    else return 0;

}

int step(int s,char t)//状态转换设置部分:共有四种状态:0,1,2,3
{
    if (t=='a')   //判断输入符号'a'时,如果符合状态0,则返回1,其他返回3,1,3等等。
        switch(s)
    {
    case 0:return 1;
    case 1:return 3;
    case 2:return 1;
    case 3:return 3;
    }
    else if (t=='b')  //判断输入符号'b'时,如符合状态0,则返回2,其他依此类推。
            switch(s)
    {
    case 0:return 2;
    case 1:return 2;
    case 2:return 3;
    case 3:return 3;
    }

}

int realize(char * input)  // 输入符号串识别部分——自动机的构造过程;用循环语句来进行多个符号的输入和判断。
{
int z=3;
int s,i;
s=0;
for (i=0;input[i]!='\n';i++)
{
printf("%2d",s);
s=step(s,input[i]);}
if(in(s,z))
return 1;
else return 0;
}

main()  //主程序将输入符号、自动机的状态、输出结果打印在屏幕上。
{
    int i;
    int a;
    char input[40];
    printf("FA=({0,1,2,3},{a,b},M,0,{3})\n");
    printf("M:\n");
    printf("    M(0,a)=1     M(0,b)=2\n");
    printf("    M(1,a)=3     M(1,b)=2\n");
    printf("    M(2,a)=1     M(2,b)=3\n");
    printf("    M(3,a)=3     M(3,b)=3\n");



    printf("please enter your string which is to be checked:\n");

lop:for(i=0;input[i-1]!='\n';i++)
        scanf("%c",&input[i]);//将输入的单个字符传给input[i]
    for(i=0;input[i-1]!='\n';i++)
        if (input[i]!='a'&&input[i]!='b'&&input[i]!='\n')
        {
            printf("input error,enter again please:\n");
            goto lop;        
        }
        printf("the status sequence is:\n");
        a=realize(input);
        if(a==1)
            printf("\n So this string can be identified,\n");
            else printf("\n This string can't be identified,\n");
            printf(" press enter to exit the program.\n");
            getchar();
}
我的问题是:
(1)那个char input[40]貌似没什么用啊,就是比如说我设置成char input[4];它照样也能识别babbbbbb
(2)还是那个for循环的结束条件,实在弄不明白
2015-10-15 00:20
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
1. 越界的数据不保证安全,访问其他变量或是调用函数可能就改写了

2. 还请自己思考


莫问前尘有愧,但求今生无悔
2015-10-15 07:48
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回答1楼问题:for的终止条件是判断是否输入回车。由于数组接受回车符后,for循环计数i自动增加1个,所以要判断是否接受了回车符在数组i-1处。
回答5楼问题:编译器对栈变量定义通常有32-64字节的安全缓冲区(各编译器有差别),所以程序可能运行正常,从你的程序看,当数组input的值越界后会影响变量a、i的值,你自己可以试试。

能编个毛线衣吗?
2015-10-15 08:25
bbsy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-10-14
收藏
得分:0 
感谢版主的回复!
再求教一个小问题,还是for循环,i=0的时候,input[i-1]!='\n',这个如何说明这个条件的成立?0-1不是为负值了吗,那input[-1]!='\n'该如何去理解?
谢谢!!
2015-10-15 16:49
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:5 
假如唐伯虎看“金瓶梅”从10月15号到10月25号就看完了
唐唐的好朋友如花是从10月5号就开始看了,如花10月10号就看完了
以如花看完“金瓶梅”时间做起始点
如花:   5 6 7 8 9 10
时间线 :0 1 2 3 4  5
对唐唐来说如花的时间线就是负数,因为早就发生了,就算是“过去”
又以唐唐看完“金瓶梅”时间做起始点
唐唐  :15 16 17 18 19 20 21 22 23 24 25
时间线:0  1  2  3  4  5  6  7  8  9  10
对如花来说唐唐的时间线就是正数,因为还没有发生,就算是“未来”
时间线不一样,你又怎么能说,它就是负数呢
  
2015-10-15 17:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
for(i=0;input[i-1]!='\n';i++)
 scanf("%c",&input[i]);

循環計數器i從0開始,那麼判斷的結束條件input[i-1]的下標是input[-1],這是什麼東西?

授人以渔,不授人以鱼。
2015-10-15 19:37
快速回复:for 循环的终止条件——不懂啊求教!
数据加载中...
 
   



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

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