使用while循环读取命令功能

时间:2017-09-01 13:39:07

标签: c do-while

我已经编写了一个读取命令功能。它将字符存储到数组之前#34; go"(以新行开头)并返回字符数但似乎是第一个字总是没有检测到,有时它会返回而不识别单词" go"。谁能帮我。非常感谢!

int read_command(char *input){
    char inputarr[1000];
    int count=0; 

    do
    {
        inputarr[count++]=getchar();
        input++;
    }while(inputarr[count-2]!='\n'&&inputarr[count-1]!='g'&& inputarr[count]!='o');

    inputarr[count--]='\0';
    inputarr[count--]='\0';

    for (int i=0 ;inputarr[i]!='\0';i++) {
        printf("%c",inputarr[i]);
    }

    return count;
}

典型输出:

1

I like apple and how about you
go

 like apple and how about you
29Program ended with exit code: 0

2

I like today's weather 
and it is very sunny

 like today's weather 
22Program ended with exit code: 0

谢谢!

1 个答案:

答案 0 :(得分:1)

您尚未正确处理所有方案 - 1.如果"去"在第一线本身? 2.如果句子中的第一个单词以&#34开头怎么办?去"子串? 3.在开始时,您无法检查inputarr [count-2],因为它将是负值。 您可以参考以下程序,如果您输入" go"然后按Enter键,它将打印所有行 -

#include <stdio.h>
int main(void)
{   int c='\0';
    char ch[100];
    int i=0;
    while (c != EOF){
        c = getchar();
        ch[i]=c;
        i++;
        printf("<%c>\n",c);
        if(i >= 3 && ch[i-1] == 'o' && ch[i-2] == 'g' && ch[i-3] == '\n'){
            int j;
            for(j=0;j<i-2;j++){
                printf("%c",ch[j]);
            }
            break;
        }
    }
    return 0;
}