C语言题解:注意%C前的空格

P4414 [COCI2006-2007#2] ABC

cuncuntuozai @ 2024-10-27 22:30:47

#include <stdio.h>
int main()
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    int C=a>b?(a>c?a:c):(b>c?b:c);
    int A=a<b?(a<c?a:c):(b<c?b:c);
    int B=(a+b+c)-(C+A);
    char ch;
    for(int i=0;i<3;i++){
        scanf(" %c",&ch);
        if(ch=='A'){
            printf("%d ",A);
        }
        if(ch=='B'){
            printf("%d ",B);
        }
        if(ch=='C'){
            printf("%d ",C);
        }

    }
    return 0;

} 

by cuncuntuozai @ 2024-10-27 22:31:51

在scanf函数的格式字符串中使用空格有以下作用和原理:

  1. 输入缓冲区和空白字符问题 当程序使用scanf等输入函数时,用户输入的数据会先被存储在输入缓冲区中。这个缓冲区中可能存在各种字符,包括空白字符(如空格、制表符、换行符等)。 在连续多次使用scanf函数读取不同类型数据时,如果不处理这些残留的空白字符,可能会导致意外的结果。例如,如果之前的输入操作留下了一个换行符在缓冲区中,而下一次scanf期望读取一个字符或其他非空白字符类型的数据,那么这个换行符可能会被误读。
  2. 空格在格式字符串中的作用 在scanf的格式字符串中,空格用于指示scanf跳过输入缓冲区中的空白字符(包括空格、制表符、换行符等)。 例如,当格式字符串为" %c"时,scanf在读取字符之前会跳过所有的空白字符,直到遇到一个非空白字符,然后将这个非空白字符读取到指定的变量中。这就保证了读取的字符是用户真正想要输入的内容,而不是之前输入遗留的空白字符。

|