我必须在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
}
我已经在这个小问题上花了好几个小时试图找出来,所以任何指针都有帮助。谢谢!
编辑:我尝试在if语句中使用kbhit()函数来检查它们是否在输入中输入或输入是否来自文件。但是,我没有conio.h,还有什么选择,还在使用scanf吗?
答案 0 :(得分:1)
您需要将scanf输出与EOF
while(scanf("%c", &temp) != EOF)
{
}
您可以将其转换为:
do{
length1 = check(temp, length1, exp1); //returns length of exp1
end = scanf ("%c", &temp); //scan next char for loop
}while (temp != '\n' && end != EOF) ;
答案 1 :(得分:1)
scanf
将返回EOF
。所以你可以检查一下。但是你每次只读一个字符,这似乎没有必要,因为你已经检查了返回值1
。
我认为错误在while
条件的逻辑中,应该是:
while (temp != '\n' && end == 1)
// ^^
答案 2 :(得分:1)
你的范围较窄的问题已经得到解答,但是让我给你一个好的建议。如果您没有被迫在课堂上使用scanf()
(即您正在编写真实的,生产代码),那么
摆脱scanf()
。这是邪恶的。它没有按照你的想法做到。
如果您想一次获得一个字符,请使用一次获取一个字符的函数。这是fgetc(stdin)
。
int c;
while ((c = fgetc(stdin)) != EOF) {
/* process `c' */
}