我是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;
}
编辑: 谢谢大家,我做到了:)
答案 0 :(得分:1)
使用fflush
后,您立即阅读了一个角色。永远不会打印/处理该字符。删除该读取,然后将while循环更新为
while((cInput = fgetc(stdin)) != EOF && moreData)
确保将cInput重新声明为int
,这是来自fgetc的正确返回类型。