繁体   English   中英

我正在开发自己的多行输入函数,当我想终止时无法终止

[英]I am developing my own multi-line input function, can't terminate when I want to

我正在尝试做一个函数,该函数将指向字符数组的指针,其大小和1作为争论。

#include<stdio.h>
#include<string.h>

#define FIRST_LINE 1
#define DONE 2
#define MORE_LINES 3
#define EXTRA 4

int a_fun(int, char *, size_t);

main()
{
char que[20];
int status=0;
status=a_fun(FIRST_LINE,que, sizeof(que));
fputs(que,stdout);

printf("\nStatus:\t %d\n",status);

return 0;
}


int a_fun(int lnum, char *str, size_t sz)
{

    char *temp, ch, *end="!exit";
    if(lnum==FIRST_LINE)
    {

        if (fgets (str, sz, stdin) == NULL)
        {
            printf("\nEntered nothing at all. (Type !exit to terminate)\n");
            return FIRST_LINE;
        }
        for(;(*str!='\0'||*end!='\0');str++,end++)
        {
            if(!*str) if(!*end) return DONE;
        }

        if(strlen(str)>=sz)
        {
            while((ch=getchar())!='\n'); //cleaning buffer
            return EXTRA;
        }
        return MORE_LINES;
    }
}

我想通过输入“!exit”来退出输入,但是我无法做到这一点。 我试图用if(strcmp(str,"!exit")==0) return DONE; 并使用if(str=="!exit") return DONE;
最终,我试图逐个字符地比较这两个字符,但全都比较。 请尝试给我一些解决方案。

要输入更多行,我们可以在a_fun()中使用条件块,因此基本上现在它只是一个行输入函数,我的问题是终止输入过程(如果它处于多行状态)。

如果除了我最初的问题之外,如果您能提出任何使此功能更安全的建议,将不胜感激,因为我将在我的网站的CGI代码中使用此功能。

if(strcmp(str,"!exit")==0)

这将不起作用,因为fgets()在输入末尾添加了换行符,并且您必须小心地将\\n替换为\\0来执行上述检查。

感谢@Gopi现在我已经解决了我的问题:

        while(1)
        {
            if((*end=='\0')&&(*str=='\n')) return DONE;
            if((*end!=*str)||(*end=='\0')) break;
            end++;
            str++;
        }

另一个解决方案是:

    char end[]={'!','e','x','i','t','\n'};
    if(strcmp(str,end)==0) return DONE;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM