【问题标题】:While loop not working with fgetc虽然循环不适用于 fgetc
【发布时间】:2016-04-06 18:28:33
【问题描述】:

所以这就是我想要做的:

  1. 我要求用户输入多个句子

  2. 只要他想停下来就按Q(大写字母)

  3. 然后应该开始下一个处理。

我现在得到了什么:

  1. 提示用户输入任意数量的句子
  2. 但是当他按下 Q 时,控件不会从 while 循环转移到下一条指令。

这是一个 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); 
}

【问题讨论】:

  • 只是为了确定,您是按 shift+q 来尝试退出,对吗?
  • 请注意 fgetc() 返回int,而不是char。此外,这甚至不应该编译,printf("ch===%c"ch); 缺少逗号。发布代码时请更加勤奋。
  • @Jacobr365 是的,我使用 shift+q 的 \m。
  • 编译后(通过包含stdio.hstdlib.hfcntl.hstring.h 并添加逗号)它在输入Q(并输入)后退出循环。它挂在open上,等待其他进程打开fifo进行读取。
  • @Jens 是的。对于那个很抱歉。如果我错了,请纠正我,如果fgetc 返回int 那么我如何在ch 变量中获取一个字符?我还在学习 C。对于无聊的问题,我很抱歉。

标签: c string while-loop fifo fgetc


【解决方案1】:

忽略 mkfifo 正在发生的事情的可能性,这就是你应该如何阅读标准输入:

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';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多