2016-02-11 24 views
0
#include<stdio.h> 
int main() 
{ 
int a,b; 
printf("enter two numbers "); 
scanf("%d \n%d",&a,&b); 
printf("%d %d",a,b); 
return 0; 
} 

当我给出像3和5这样的输入时,那么问题是即使我给出的输入中没有任何换行符,scanf函数也会扫描输入值,但在正式字符串中,应该在换行符后扫描下一个输入,以便在几个空格之后如何扫描下一个输入。scanf函数格式字符串中换行符的意义是什么?

回答

4

scanf格式字符串中的空格告诉scanf(和系列)读取并忽略输入中的空白。不管你在格式中使用什么样的空格字符:空格,换行符和制表符都是一样的。

但是,您实际上并不需要它适用于所有格式。大多数scanf格式自动读取并忽略前导空格,包括"%d"格式。

+0

因此,这意味着换行也是一个空白? –

+0

@RadhaGogia这是正确的。如果你想知道什么字符是“空格”字符,可以制作一个简单的测试程序,循环使用基本字母表中的所有127个字母,并检查['isspace'](http://en.cppreference.com/w/c /串/字节/ isspace为)。 –

1

"%d \n%d"格式字符串中的" \n"将“吃”由isspace(包括换行符)定义的所有空格字符。

要强制关闭读取单独的行内的整数,而使用这样的:

if(scanf("%d%*[^\n]\n%d",&a,&b) != 2) return EXIT_ERROR; 
相关问题