输入文字后需要按两次回车 - C
Enter needs to be pressed twice after inserting text - C
我试图一次从用户那里获取多行文本并逐行处理它,但是从剪贴板插入到控制台后,需要按两次 ENTER 才能发送并继续。
预期行为:CTRL+V 然后 ENTER 执行程序。
实际行为:CTRL+V 插入文本,ENTER 开始新行,第二个 ENTER 发送文本。
处理输入的函数:
char* getNewLine(bool* finish){
char* string;
string = malloc(sizeof(char));
string[0]='[=10=]';
int c;
int i = 0;
while( (c = getchar()) != '\n'){
string = realloc(string, sizeof(char)*(i+2));
string[i] = (char)c;
string[i+1] = '[=10=]';
i++;
}
if(i == 0){ //if last line was empty, stop while loop in main
*finish = true;
}
return string;
}
主程序:
int main(){
bool finish = false;
int line_count = 0; //Number of lines found
int good_count = 0; //Lines matches
char* line;
while(!finish){ //Read console line-by-line
line = getNewLine(&finish);
if(!finish){
if(checkString(line)){ //checkString returns true, if string matches some conditions
good_count++;
}
line_count++;
}
free(line);
}
printf("%d/%d\n", line_count, good_count);
return 0;
}
这在我的电脑 (debian) 上似乎不是问题。
如果您尝试替换您的代码
if(checkString(line)){
good_count++;
}
和
printf("line: %s\n",line);
你会看到代码在你按下 enter 后被解析,至少它在 linux 上是这样。
该问题可能有两个原因:
- 您正在使用 Windows,因此您需要检查“\r\n”而不是“\n”。
- 你正在尝试只用一行来使用这个程序,只有当你按下空行时才会打印输出,所以你需要给第一个 \n 来解析 Ctrl+V 第二个退出该程序。在这种情况下,您的程序可以正常工作。
希望对您有所帮助
您的 main
代码有一个循环,它会重复读取输入行,直到您输入一个空行。所以你需要输入一个空行来结束循环并完成程序。如果您的剪切粘贴文本不包含空行,您需要输入一个空行——所以如果您的剪切粘贴文本不是完整的行,在 ctrl-V 之后,您需要按回车键结束粘贴的最后一行,然后再次输入输入一个空行并退出循环。
我试图一次从用户那里获取多行文本并逐行处理它,但是从剪贴板插入到控制台后,需要按两次 ENTER 才能发送并继续。 预期行为:CTRL+V 然后 ENTER 执行程序。 实际行为:CTRL+V 插入文本,ENTER 开始新行,第二个 ENTER 发送文本。
处理输入的函数:
char* getNewLine(bool* finish){
char* string;
string = malloc(sizeof(char));
string[0]='[=10=]';
int c;
int i = 0;
while( (c = getchar()) != '\n'){
string = realloc(string, sizeof(char)*(i+2));
string[i] = (char)c;
string[i+1] = '[=10=]';
i++;
}
if(i == 0){ //if last line was empty, stop while loop in main
*finish = true;
}
return string;
}
主程序:
int main(){
bool finish = false;
int line_count = 0; //Number of lines found
int good_count = 0; //Lines matches
char* line;
while(!finish){ //Read console line-by-line
line = getNewLine(&finish);
if(!finish){
if(checkString(line)){ //checkString returns true, if string matches some conditions
good_count++;
}
line_count++;
}
free(line);
}
printf("%d/%d\n", line_count, good_count);
return 0;
}
这在我的电脑 (debian) 上似乎不是问题。
如果您尝试替换您的代码
if(checkString(line)){
good_count++;
}
和
printf("line: %s\n",line);
你会看到代码在你按下 enter 后被解析,至少它在 linux 上是这样。 该问题可能有两个原因:
- 您正在使用 Windows,因此您需要检查“\r\n”而不是“\n”。
- 你正在尝试只用一行来使用这个程序,只有当你按下空行时才会打印输出,所以你需要给第一个 \n 来解析 Ctrl+V 第二个退出该程序。在这种情况下,您的程序可以正常工作。
希望对您有所帮助
您的 main
代码有一个循环,它会重复读取输入行,直到您输入一个空行。所以你需要输入一个空行来结束循环并完成程序。如果您的剪切粘贴文本不包含空行,您需要输入一个空行——所以如果您的剪切粘贴文本不是完整的行,在 ctrl-V 之后,您需要按回车键结束粘贴的最后一行,然后再次输入输入一个空行并退出循环。