| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4232 人关注过本帖
标题:for 循环的终止条件——不懂啊求教!
取消只看楼主 加入收藏
bbsy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-10-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
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
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
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
bbsy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-10-14
收藏
得分:0 
回复 10楼 TonyDeng
就是这点搞不懂,比如当i=0时,判断input[i-1]!='\n',那此时不应该是i-1=-1吗?input[-1],这个指向哪?怎么判断此时的input[i-1]!='\n'是成立的从而能接收输入的第一个字符?
当i=1,2,3,4这些都能理解,唯一这一开始,不太明白
2015-10-15 21:46
快速回复:for 循环的终止条件——不懂啊求教!
数据加载中...
 
   



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

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