首页 > 代码库 > C中用scanf()时应注意的一些问题

C中用scanf()时应注意的一些问题

  最近在做题时遇到了scanf()的一些问题,下面说一下,scanf()中一些需要注意的地方:

先说一下scanf()的格式:

scanf(“格式控制字符串”, 地址表列);

0、格式字符串一般形式如下:

%[*][输入数据宽度][长度]类型

其中有方括号[]的项为任选项,举个*的栗子:

 

#include <stdio.h>
int main()
{
    int a,c;
    scanf("%3d%*d%d",&a,&c);//第二个%d被略过了
    printf("%d\n%d",a,c);
    return 0;
}

 

技术分享

 

 

1、scanf函数中没有精度控制,而printf()可以,如下:

#include <stdio.h>
int main()
{
    float a;
  //  scanf("%3.2f",&a); 错误写法
    scanf("%f",&a);
    printf("%3.2f",a);
    return 0;
}

技术分享

2、在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束,如下:

 

#include <stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    printf("%d",a);
    return 0;
}

 

 

 

技术分享其中数据结束在d,所以输出123

 

3、在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符,如下:

 

#include <stdio.h>
int main()
{
    char a,b,c;
    scanf("%c%c%c",&a,&b,&c);
    printf("%c%c%c",a,b,c);
    return 0;
}

 

 

 

技术分享其中a为d,b为空格,c为e

4、若想在输入字符时用空格隔开则这样写:

 

#include <stdio.h>
int main()
{
    char a,b,c;
    scanf("%c %c %c",&a,&b,&c);//之间加上空格
    printf("%c%c%c",a,b,c);
    return 0;
}

技术分享

注:如果输入的是整形等非字符型数据,根据2、可知道不须这么写,因为空格会被视为非格式串。

本文摘自http://c.biancheng.net/cpp/html/34.html

 

C中用scanf()时应注意的一些问题