C:如何在使用 scanf 一次一个字符时检查键盘或文件输入的结尾

0 c io input scanf

我必须用 C 语言为类编写一个程序,一次读取一个字符,并且我们必须使用 scanf。我让它只使用键盘输入,但是,我的老师也将使用文件重定向来测试代码。

int end;                                    //return value of scanf
int length1;                                //length of string exp1
char temp,                                  //temp char for input
char exp1[81];                              //string

printf ("Please enter in a regular expression:\n");
end = scanf ("%c", &temp);

while (temp != '\n' || end == 1) {          //check if end of input
   length1 = check(temp, length1, exp1);    //returns length of exp1

   end = scanf ("%c", &temp);               //scan next char for loop
}
Run Code Online (Sandbox Code Playgroud)

我已经花了几个小时来解决这个小问题,试图解决这个问题,所以任何指示都会有所帮助。谢谢!

编辑:我尝试在 if 语句中使用 kbhit() 函数来检查他们是否输入了输入或者输入是否来自文件。但是,我没有 conio.h,在仍然使用 scanf 的同时还有其他选择吗?

小智 5

你的小范围问题已经得到解答,但让我给你一个好建议。如果您没有被迫scanf()在课堂上使用(即您正在编写真实的生产代码),那么

只要摆脱scanf(). 这是邪恶的。它不会做你认为它会做的事。

如果您想一次获取一个字符,请使用一次获取一个字符的函数。那就是fgetc(stdin)

int c;
while ((c = fgetc(stdin)) != EOF) {
    /* process `c' */
}
Run Code Online (Sandbox Code Playgroud)