2015-03-16 4 views
0

Я новичок в программировании C, и мне было предложено создать простой разделитель строк, , который получает предложение от пользователя (в stdin) и снова печатает его в stdout (без сохранения всего предложения) и пропускает одну строку («\ n»), если были введены «@» или «*». (также они хотят, чтобы каждое предложение начиналось с номера строки). Я закончил программу, и она отлично работает, кроме одной мелочи: для каждого входа. Я пытаюсь, чтобы первая буква терялась. Остальное сделано, как и требовалось.разделитель строк от stdout до stdin

может ли кто-нибудь сказать мне, что не так?

#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; 
} 

EDIT: спасибо всем, я сделал это :)

+1

Вы имели в виду '% d' вместо'% c' во второй 'printf'? –

+1

да его для подсчета строк, а не для получаемого ввода – lolu

+0

'default: break;' не нужно удалять его. –

ответ

1

Сразу после того, как вы используете fflush, когда вы читаете характер. Этот символ никогда не печатается и не обрабатывается. Удалить это чтение, а затем обновить время цикла для

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

Убедитесь, что вы переобъявить CINPUT как int, который является правильным типом возвращения из fgetc.

+1

И удалите 'fgetc' в цикле' while'. –

+0

изменение цикла while вы сказали, что я это сделал, но когда я изменил cInput на int, он не напечатал мое предложение, поскольку он должен =/ – lolu

+0

также удалил флешку – lolu