#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,没有编译错误。被困这个问题已经两天了。
答案 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()