user-0 提问: 求助

回复:
user: user-1
content: MSDN上提到，scanf()函数的返回值 Returns the number of fields successfully converted and assigned; A return value of 0 indicates that no fields were assigned. 意思大概就是当通过scanf()函数成功读取数据后，该函数的返回值是读取数据的变量的个数；如果未能成功读取数据，则该函数的返回值是0。 所以，要结束while()虚幻，只需要输入非数字即可。VS2015 C++环境调试  当输入2按下回车后，scanf()函数返回值是1，所以会运行while中的语句；之后输入a按下回车，此时scanf()函数返回值是0，结束while循环，执行之后的代码，完成输出。

user: user-2
content: Format Specification Fields: scanf and wscanf Functions A format specification has the following form:  % [width] [{h | l | I64 | L}]type  The format argument specifies the interpretation of the input and can contain one or more of the following:   White-space characters: blank (' '); tab ('\t'); or newline ('\n'). A white-space character causes scanf to read, but not store, all consecutive white-space characters in the input up to the next non–white-space character. One white-space character in the format matches any number (including 0) and combination of white-space characters in the input.   Non–white-space characters, except for the percent sign (%). A non–white-space character causes scanf to read, but not store, a matching non–white-space character. If the next character in stdin does not match, scanf terminates.   Format specifications, introduced by the percent sign (%). A format specification causes scanf to read and convert characters in the input into values of a specified type. The value is assigned to an argument in the argument list.  The format is read from left to right. Characters outside format specifications are expected to match the sequence of characters in stdin; the matching characters in stdin are scanned but not stored. If a character in stdin conflicts with the format specification, scanf terminates, and the character is left in stdin as if it had not been read.  When the first format specification is encountered, the value of the first input field is converted according to this specification and stored in the location that is specified by the first argument. The second format specification causes the second input field to be converted and stored in the second argument, and so on through the end of the format string.  An input field is defined as all characters up to the first white-space character (space, tab, or newline), or up to the first character that cannot be converted according to the format specification, or until the field width (if specified) is reached. If there are too many arguments for the given specifications, the extra arguments are evaluated but ignored. The results are unpredictable if there are not enough arguments for the format specification.  Each field of the format specification is a single character or a number signifying a particular format option. The type character, which appears after the last optional format field, determines whether the input field is interpreted as a character, a string, or a number.   The simplest format specification contains only the percent sign and a type character (for example, %s). If a percent sign (%) is followed by a character that has no meaning as a format-control character, that character and the following characters (up to the next percent sign) are treated as an ordinary sequence of characters, that is, a sequence of characters that must match the input. For example, to specify that a percent-sign character is to be input, use %%.  An asterisk (*) following the percent sign suppresses assignment of the next input field, which is interpreted as a field of the specified type. The field is scanned but not stored.

user: user-3
content: 引用 5 楼 forever74 的回复:代码里%d后面有空格，你输入的时候2和回车中间也该加空格。跟空格没关系，格式化输入会自动将空格忽略，只有非空格字符才会严格按转换批示字符串匹配。

user: user-3
content: 你代写得有问题，本来就不应该有输出的。你一直输入数字然后回车，程序会一直在while(scanf("%d",&a)==1)中循环的，除非你输入非法的字符才会结束循环。

user: user-4
content: 供参考：https://blog.csdn.net/21aspnet/article/details/174326 建议改为如下形式：while(scanf("%d",&a),a){//输入0时结束输入

user: user-5
content: 代码里%d后面有空格，你输入的时候2和回车中间也该加空格。

user: user-0
content: 引用 1 楼 自信男孩 的回复：回车符是将输入缓存的内容刷到内存，如果输入缓存里没有内容，那么如何刷到内存？程序在下面，我输入的是2 加回车但是没输出

user: user-0
content: #include<iostream> #include<cstdio> using namespace std; long long a,s,i,w; int main() { 	while(scanf("%d ",&a)==1) { 		s+=a; 		i++; 	} 	w=1; 	for(int j=1; j<i; j++) 		w*=2; 	cout<<s*w;  	    return 0; }

user: user-6
content: 回车符是将输入缓存的内容刷到内存，如果输入缓存里没有内容，那么如何刷到内存？