函数getline();在C中不要停止输入

时间:2015-12-13 13:40:30

标签: c input getline ignore

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>

char split_text(){

    int bytes_las;
    int antal_bytes = 40;
    char *min_strang;

    printf("Enter text: ");

    min_strang = (char *) malloc (antal_bytes + 1);
    bytes_las = getline (&min_strang, &antal_bytes, stdin);

    printf("\n%s",min_strang);

}


int main()
{
    printf("   MENU:\n");
    printf("1) Split text\n");
    printf("2) Upper case to lower case\n");
    printf("3) Lower case to upper case\n");
    printf("4) Remove character\n");
    printf("5) Add character\n");
    printf("6) Replace character\n");
    printf("7) Statistics\n");
    printf("8) Sort text\n");
    printf("0) Exit\n");


    int i;
    char option;

    for(i=0; i<5;i++){


        printf("I want: "); //assign the option number
        option = getchar();
        switch(option) {                //use function assigned to what option

        case '1'  :
                printf("do for 1\n");
            split_text();
                break;

        case '2'  :
                printf("do for 2\n");
            break;

        case '3'  :
                printf("do for 3\n");
            break;

        case '4'  :
                printf("do for 4\n");
            break;

        case '5'  :
                printf("do for 5\n");
            break;

        case '6'  :
                printf("do for 6\n");
            break;

        case '7'  :
                    printf("do for 7\n");
            break;

        case '8'  :
                printf("do for 8\n");
            break;

        case '0'  :
                printf("do for 0\n");
            exit(0);

        default :   
            break;
        }

    }
}

这是我在单独文件中的功能。在调用它时,函数读取并得到正确的&#34;输入文本:&#34;输出。但是,没有限制。当我按下Enter键时,没有任何事情可以继续输入。

我对C很新,我需要使用此功能。我在Ubuntu上只使用C,没有编译错误。被困这个问题已经两天了。

2 个答案:

答案 0 :(得分:0)

您可以通过各种方式结束输入,其中一种可能是:

ssize_t read;
read=getline(&min_strang, &antal_bytes, stdin);

if(read < 1){
    printf("Input ends here\n");
            return 1;  
    }

当没有更多要写的时候,这就结束了。

答案 1 :(得分:0)

问题是

        option = getchar();

由于输入通常是行缓冲,因此输入e。 G。 1\n,我。即在输入缓冲区中放入两个字符,其中只使用带有1的{​​{1}},并且getchar()保留在缓冲区中。此后调用\n时,它会从缓冲区中获取下一个字符,此getline()会立即导致\n返回空行。
要解决此问题,请使用最多getline()的菜单输入,以便\n必须读取新输入:

getline()