我编写了一个程序,为了调试目的,我想在控制台中写一些文本。现在我发现了一个非常奇怪的错误,无法找到解决方案。这是我的代码:
int main(void)
{
setvbuf (stdout, NULL, _IONBF, 0);
char input[50];
char check = 'a';
for(int i=0; check != EOF; ++i){
check = scanf("%s", input);
printf("%s\n",input);
}
fflush(stdout);
char* myAnswer = createList();
printf("%s\n", myAnswer);
return 0;
}
//-----------------------------------------------------------------------------
char* createList(){
char* msg = malloc(6*sizeof(char));
msg[0]='A';
msg[1]='B';
msg[2]='C';
msg[3]='D';
msg[4]='E';
msg[5]='\0';
return msg;
}
for循环工作正常,但从不写“ABCDE”。相反,有时我在输入中保存的最后一个单词第二次写入控制台,错过了最后一个字母。或者根本没有写。 我尝试通过刷新缓冲区或将其设置为零大小来解决它。但没有任何帮助我。我和Qt Creator合作,错误可能在我的IDE中吗?
答案 0 :(得分:2)
更正了代码的某些部分(比如在EOF上打破循环,将数据类型更改为int等)。请查看以下代码是否有效。您需要在最后一次输入后按Ctrl-D以确保循环中断。
#include <stdio.h>
#include <stdlib.h>
char* createList();
int main(void)
{
setvbuf (stdout, NULL, _IONBF, 0);
char input[50];
for(;;){
if (fgets(input, 50, stdin) == NULL)
break;
printf("%s\n",input);
}
fflush(stdout);
char* myAnswer = createList();
printf("%s\n", myAnswer);
return 0;
}
//-----------------------------------------------------------------------------
char* createList(){
char* msg = (char *) malloc(6*sizeof(char));
msg[0]='A';
msg[1]='B';
msg[2]='C';
msg[3]='D';
msg[4]='E';
msg[5]='\0';
return msg;
}
答案 1 :(得分:0)
以下代码
1) eliminates the code clutter
2) checks for errors
3) compiles cleanly
4) when user input <CTRL-D> (linux) then program receives a EOF
#include <stdio.h>
#include <stdlib.h>
#define MAX_INPUT_LEN (50)
char *createList(void);
int main(void)
{
char input[MAX_INPUT_LEN];
while( 1 == scanf("%49s", input) )
{
printf("%s\n",input);
}
char* myAnswer = createList();
printf("%s\n", myAnswer);
return 0;
}
//-----------------------------------------------------------------------------
char* createList(){
char* msg = malloc(6);
if( NULL == msg )
{ // then malloc failed
perror( "malloc failed" );
exit( EXIT_FAILURE );
}
// implied else, malloc successful
msg[0]='A';
msg[1]='B';
msg[2]='C';
msg[3]='D';
msg[4]='E';
msg[5]='\0';
return msg;
}