c-printf不创建输出或创建错误的输出



我写了一个程序,为了调试目的,我想在控制台中写一些文本。现在我发现了一个非常奇怪的错误,找不到解决方案。这是我的代码:

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("%sn",input);
    }
    fflush(stdout);
    char* myAnswer = createList();
    printf("%sn", 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]='';
    return msg;
}

for循环运行良好,但从不编写"ABCDE"。相反,有时我在输入中保存的最后一个单词会第二次写入控制台,缺少最后一个字母。或者根本没有写出来。我试图通过刷新缓冲区或将其设置为零来解决这个问题。但没有任何帮助。我使用Qt Creator,错误可能在我的IDE中吗?

更正了代码的某些部分(如中断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("%sn",input);
    }
    fflush(stdout);
    char* myAnswer = createList();
    printf("%sn", 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]='';
    return msg;
}

以下代码

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("%sn",input);
    }

    char* myAnswer = createList();
    printf("%sn", 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]='';
    return msg;
}

相关内容

  • 没有找到相关文章

最新更新