我对此感到困惑,我无法弄清楚何时设置输入。示例 - > “LEMON TREE”,(我设置那个(输入)读取它的双倍时间函数getline
),它给我错误的输出像“LEMON TRE E”下来我解释这个,问题是我怎么能改变代码对于getline
(我的修改过的函数)并将输出分开,这里是我的函数getline
,这里是视觉我想要的。
我使用k& r-ansii书中的函数(很少修改):
int getline(char *line, int len)
{
int i,c;
for ( i =0;i<len-1 && (c = getchar()) != EOF && c!='\n';i++)
*line++ = c;
if ( c == '\n')
{
i++;
*line++ = '\n';
*line = '\0';
}
return i;
}
这是我想要的视觉效果:
char line_1[10];
char line_2[10];
getline(line_1, 10);
getline(line_2, 10);
printf("line_1: %s ", line_1);
printf("line_2: %s", line_2);
INPUT:LEMON TREE //就像你看到的那样输入一行。 输出:line_1:LEMON TRE line_2:E
更新:我想改变我的功能,它可以使用多于两个的单词(使它成为通用的)。
答案 0 :(得分:0)
您还需要检查空格(例如空格)以确定单词结束的位置
for ( i =0;i<len-1 && (c = getchar()) != EOF && c!='\n' && c!=' ';i++) {
*line++ = c;
}
/ *编辑:(感谢BLUEPIXY的评论提醒我)Alyways使用足够大的字符串(或其他数据类型)来包含分配给它的可能输入/值。
* /
对于函数的普遍性,你可以在一个循环中调用getline并使用它的返回值来确定最后一个单词是否已被读取或使用多维数组
while (getline(line_1, 10)!= -1) {
printf("line_1: %s ", line_1);
}
不要忘记编辑函数的返回值(我用来指定不可能以任何其他方式返回的值(通常负值表示在计算某些内容时出错):
if ((c == EOF) ||(c == '\n')) {
i = -1;
}
也
if ( c == '\n')
{
i++;
*line++ = '\n';
*line = '\0';
}
应该简单地替换为
*line = '\0'; //every string needs to be finalized
至于第二个问题,根据http://www.cplusplus.com/reference/cstdio/ stdio.h不包含getline函数