从stdout到stdin的分线器

时间:2015-03-16 15:36:43

标签: c stdout stdin

我是C编程新手,我被要求建立一个简单的分线器, 接收来自用户的句子输入(在标准输入中),并在标准输出中再次打印(不保存整个句子)并跳过一行(" \ n")如果" @& #34;或" *"输入了。 (他们也希望每个句子都以其行号开头)。 我完成了这个程序,除了一件小事之外它很棒: 对于每个输入我尝试第一个字母丢失。 其余的都按照我的要求完成。

谁能告诉我出了什么问题?

#include <stdlib.h>
#include <stdio.h>
#include <string.h>


int main(int argc, char **argv) {
    char cInput;
    int i = 1;
    int moreData = 1;

    printf( "line_splitter, please enter a sentence:\n");
    fflush(stdout); 
    cInput = fgetc(stdin);
    printf("%c: ", i);
    i=i+1;


/*while not end of file read to avoid error*/   
    while(!feof(stdin) && moreData){
    cInput = fgetc(stdin);
    fputc(cInput,stdout);
    switch(cInput){
        case '@':
        case '*':
            printf("\n");
            printf("%d: ", i);
            i=i+1;
        break;
        case '\n':
            moreData = 0;
        default:
            break;
    }
     }
     printf( "\ndone!\n");

  return 0; 
}

编辑: 谢谢大家,我做到了:)

1 个答案:

答案 0 :(得分:1)

使用fflush后,您立即阅读了一个角色。永远不会打印/处理该字符。删除该读取,然后将while循环更新为

while((cInput = fgetc(stdin)) != EOF && moreData)

确保将cInput重新声明为int,这是来自fgetc的正确返回类型。