2016-04-06 2 views
0

Так вот что я пытаюсь сделать:Хотя цикл не работает с fgetc

  1. Я прошу пользователю ввести ряд предложений

  2. Всякий раз, когда он хочет, чтобы остановить он нажмет Q (заглавная буква)

  3. И затем должна начаться следующая обработка.

Что я получаю сейчас:

  1. Пользователю предлагается ввести столько предложений, сколько он хочет
  2. Но когда он нажимает Q контроль не переходит из цикла в то время как в следующую инструкцию.

Это программа FIFO. Если вы видите какие-либо другие ошибки, сообщите им об этом. Спасибо!

Вот код:

#include<stdio.h> 
#include<fcntl.h> 
#include<stdlib.h> 
#include<string.h> 
#include<unistd.h> 
#include<sys/stat.h> 
void main() 
{ 

int i=0,fd; 
char str[500]="",ch; 

char *myfifo="/home/rahulp/Desktop/myfifo"; 

mkfifo(myfifo,0666);  

printf("Enter the sentences:"); 

while((ch=fgetc(stdin))!='Q') 
{ 
    printf("ch===%c",ch); 
    str[i++]=ch; 

} 
str[i]='\0'; 

fd=open(myfifo,O_WRONLY); 

if(fd<0) 
{ 
    printf("Cannot open fifo"); 
} 
else 
{ 
    write(fd,str,strlen(str)); 
} 

close(fd); 
unlink(myfifo); 
} 
+0

просто чтобы убедиться, вы нажав Shift + q попытаться уйти вправо? – Jacobr365

+3

Обратите внимание, что fgetc() возвращает 'int', а не' char'. Кроме того, это не должно даже компилироваться, 'printf (" ch ===% c "ch);' отсутствует запятая. Будьте внимательны при публикации кода. – Jens

+0

@ Jacobr365 yep i a \ m используя shift + q. –

ответ

0

Игнорирование вероятность того, что что-то с mkfifo происходит, это то, как вы должны прочитать STDIN:

int ch; 

printf("Enter the sentences:"); 
fflush(stdout); 

while ((ch = fgetc(stdin)) != EOF) 
{ 
    if (ch == 'Q') 
     break; 
    printf("ch=%c\n", ch); 
    str[i++]=ch; 
} 
str[i]='\0'; 
Смежные вопросы