Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请求输入三次,而在c中它应该只执行两次_C - Fatal编程技术网

请求输入三次,而在c中它应该只执行两次

请求输入三次,而在c中它应该只执行两次,c,C,我在网上阅读后发现,如果我使用带尾随空格的%c,scanf将读取换行符,但在尝试时,它会要求我输入三次,而不是两次。请告诉我哪里出了错,为什么我得到了现在的答案 main() { double e = 5.32 ; int strlen , strlen1 ; char Test_string , Test_string2 ; scanf("%c " , &Test_string ) ; scanf("%c " , &Test_s

我在网上阅读后发现,如果我使用带尾随空格的%c,scanf将读取换行符,但在尝试时,它会要求我输入三次,而不是两次。请告诉我哪里出了错,为什么我得到了现在的答案

main()
{
 double e = 5.32 ;
 int strlen , strlen1 ;
 char Test_string , Test_string2 ;
 scanf("%c " , &Test_string ) ;
 scanf("%c " , &Test_string2 ) ; 
 printf("\n%c" , Test_string) ;
 printf("\n%c" , Test_string2) ;
 printf("Success") ;
 return 0 ;
}
输出-

P
A
U

P
ASuccess
scanf%c将尝试使用一个字符,然后使用所有可能的空格。当输入流以P\nA\n开头且尚未关闭时,scanf将继续尝试从输入流读取,直到看到输入的结尾或看到非空白字符

如果您是C新手,请不要使用scanf。

众所周知,scanf是一个蹩脚的解析器,%C转换更难正确使用

这里需要的是在读取下一个非空格字符之前,使用空格指令跳过任何空格,包括换行符。但是要获得这个值,空白必须在%c:

之前。
与其要求我们忽略额外的变量声明,不如将它们从问题中删除。删除多余的代码是构造最小完整可验证示例的一部分。@Blindy我从Sam Beckett的声音中听到了这一点。@ChristianGibbons是的,Sam Beckett因为谈论用作变量的C函数而臭名昭著lol@Blindy这可能就是量子跳跃的原理。未定义的行为会导致覆盖他自己之外的内存位置。main->int main voidFriends不允许朋友使用scanf进行键盘输入。有关进一步阅读:
 ...
 scanf(" %c" , &Test_string ) ;
 scanf(" %c" , &Test_string2 ) ;
 ...