#include<stdio.h>
int main (){
int sum[4];
for(int i=0;i<4;i++){
scanf("%d ",&sum[i]);
}
for(int i=0;i<4;i++){
printf("%d ",sum[i]);
}
}
为什么输入时会是这样
或者这样
这里为什么需要多输入一个数?
#include<stdio.h>
int main (){
int sum[4];
for(int i=0;i<4;i++){
scanf("%d ",&sum[i]);
}
for(int i=0;i<4;i++){
printf("%d ",sum[i]);
}
}
为什么输入时会是这样
引自免费微信小程序:皆我百晓生
关于你遇到的问题,当在C语言程序中使用scanf
函数读取整数时,实际上在输入流中除了数字以外还包含空格、换行符等其他字符。在你的代码中,每次scanf
调用之后,输入缓冲区中的换行符没有被处理,这会导致在下一次scanf
调用时,如果输入缓冲区中还有未处理的字符(比如换行符),那么这些字符将被当作下一次输入的一部分读取。
具体到你的例子中,当你输入“1234”并按下回车键后,scanf
函数会读取“1234”,但换行符'\n'仍然留在输入缓冲区中。当进行下一次scanf
调用时,如果输入缓冲区中存在这个换行符,它会被读取,而不需要用户再次输入任何字符,这就是为什么你会看到额外的数字被读取,实际上它是上一次输入留下的换行符。
为了解决这个问题,你需要确保在每次scanf
调用之后清空输入缓冲区中的多余字符。可以通过读取直到下一个换行符为止的所有字符来实现这一点。下面是一种修改后的代码示例:
#include <stdio.h>
int main(){
int sum[4];
char ch;
for(int i = 0; i < 4; i++){
scanf("%d", &sum[i]); // 注意这里去掉了空格,避免读取多余的空格
// 清空输入缓冲区中的换行符和其他非数字字符
while((ch = getchar()) != '\n' && ch != EOF);
}
for(int i = 0; i < 4; i++){
printf("%d ", sum[i]);
}
printf("\n");
}
在这个修改后的版本中,scanf
调用不再包含尾随的空格,这样就不会读取额外的空白字符。然后通过一个循环,使用getchar
函数读取直到遇到换行符或文件结束标志(EOF)为止的所有字符,从而清空输入缓冲区。这样可以确保下一次scanf
调用时,不会因为输入缓冲区中遗留的字符而提前终止输入。