精华内容
下载资源
问答
  • 解释:为什么scanf被跳过或执行

    万次阅读 多人点赞 2018-07-14 21:52:01
    ),可能会经常莫名遇到“啥我的第二个scanf()函数自动跳过,等待我输入就自己执行了?”的问题,或者会遇到“啥在我输入数据和回车之后程序没有反应?”,以下是浅薄的解释: 问题一:“啥我的第二个...
    作为初学者(对!就是我!一直排这个错!快被整毁了!),可能会经常莫名遇到*“为啥我的第二个scanf()函数自动跳过,不等待我输入就自己执行了?”的问题,或者会遇到“为啥在我输入数据和回车之后程序没有反应?”*,以下是浅薄的解释:

    问题一:“为啥我的第二个scanf( )函数自动跳过,不等待我输入就自己执行了?”

    一个很简单的例子:

    #include <stdio.h>
    /*试图两次利用scanf()函数,先后读取整型变量a和字符型变量c*/
    int main()
    {
    	int a;
    	char c;
    	scanf("%d",&a);
    	scanf("%c",&c);
    	printf("%d %c",a,c); 
    }
    
    解析:当我们输入:123 ↙
    会发现程序会“直接”打印整数123,好像并没有给我们留下时间和空间输入字符型变量c的值(一开始我也一脸懵B??).
    但是,经过调试(啊,万能的调试!),我们可以发现,其实整型变量c已经读入了值‘\n’,即ASCII码为10的字符——换行符;
    如调试图:

    a = 123, c= 10'\n'


    实际上:

    函数scanf( )从标准输入设备(键盘) 读取输入的信息,不会直接赋值给变量,而是先储存到一个缓冲区中(什么鬼?);

    当程序执行到函数scanf()时,程序会从缓冲区中读取
    如果缓冲区是空的,才会停滞,光标闪烁,等待键盘的输入.


    值得注意的是,scanf()中格式字符串里:

    -对于参数%d:忽略缓冲区开头的空白符(空格、回车、制表符等)(无论有几个);
    -对于参数 %c:直接读取缓冲区的第一个字符(无论这个字符是什么);


    故,上例中:

    1º 向缓冲区中输入:123\n
    2º 语句scanf("%d",&a); 读取走了123,赋给变量a
    (缓冲区变化:123\n → \n)
    3º 语句scanf("%c",&c);读取走了**\n,赋给变量c**;
    (缓冲区变化:\n → 空白)


    解决方法:

    1º 利用函数getchar( )吃掉回车:在scanf后接一个getchar( );

    #include <stdio.h>
    int main()
    {
        int a;
        char c;
        scanf("%d",&a);
        getchar();/*吃掉回车*/
        scanf("%c",&c);
        printf("%d %c",a,c); 
    }
    

    2º 利用函数fflush( )清除缓冲区:如fflush(stdin);

    #include <stdio.h>
    int main()
    {
        int a;
        char c;
        scanf("%d",&a);
        fflush(stdin);/*清除输入缓冲区*/
        scanf("%c",&c);
        printf("%d %c",a,c); 
    }
    

    注意 注意 注意 :

    有同学可能用的是新版的vs,可能不支持该方法2;可以试一下替换rewind(stdin)函数;

    或者可以直接一次性读取两个数据scanf("%d%*c", &c);——注意星号*哈!
    这句话的意思是就是说:读取一个整数后,丢弃紧跟在整数后边的一个字符(也就是我们多输入的“回车符”);

    有问题的试一下吧…


    问题二:“为啥在我输入数据和回车之后程序没有反应?”

    ——在函数scanf( )的格式字符串中加入\n的问题:

    例如:

    #include <stdio.h>
    int main()
    {
    	int a;
    	scanf("%d\n",&a);/*注意%d后的\n*/
    	printf("%d",a);
    }
    

    这种情况下,按照“整型数字 回车”的格式读取,读到回车之后,由于缓冲区空白,程序停滞,程序停滞,光标闪烁,等待键盘输入;故,当你输入一个整数和回车后,a的值不会立即打印要等再接收到一个非空白符(即非空格、回车、制表符等)的输入之后,该scanf语句才结束,接着才输出。

    如图:
    123 456 123

    解释:当输入:123↙ 程序框中换行但并不打印;
    继续输入:456↙ 此时换行,并且输出了刚才键入的123;

    总之,在使用函数scanf( )时,应该心中有一个缓冲区,合理利用相关函数来解决键盘缓冲区残余信息的问题;同时,理解读取格式,以便搞清楚何时函数scanf( )结束;啊啊啊加油加油!
    展开全文
  • 在linux系统下,使用scanf函数不能输入空格,所以编者就自己封装了一个EncapScanf函数,希望可以帮助到读者。 #include #include #include int EncapScanf(char *_pcBuffer) //封装输入函数,解决scanf不能...

    在linux系统下,使用scanf函数不能输入空格,所以编者就自己封装了一个EncapScanf函数,希望可以帮助到读者。


    #include <stdio.h>

    #include <stdlib.h>
    #include <string.h>


    int EncapScanf(char *_pcBuffer)  //封装输入函数,解决scanf不能输入空格问题
    {
        int iRet = 0;
        setbuf(stdin,NULL);
        fgets(_pcBuffer, 256, stdin);
        iRet = strlen(_pcBuffer);
        //printf("strlen= %d\n", strlen(_pcBuffer));
        _pcBuffer[iRet - 1] = '\0';
    }


    int main()
    {
        char cBuffer[256] = {0};
        printf("please input buffer\n");
        EncapScanf(cBuffer);
        
        printf("buffer= %s\n", cBuffer);

    }

    读者可以上机试一下哦微笑

    linux系统下运行结果:



    展开全文
  • 为什么scanf需要输入两次才会有结果? 以下面的代码为例子 int main() { int a; scanf("%d\n",&a); printf("输出为 %d\n",a); return 0; } 错误原因是:scanf中多了\n,剔除掉scanf才可以一次性...

    为什么scanf需要输入两次才会有结果?

     

    以下面的代码为例子

    int main()
    {
        int a;

        scanf("%d\n",&a);

        printf("输出为 %d\n",a);

        return 0;
    }

     

    错误原因是:scanf中多打了\n,剔除掉scanf才可以一次性录入!

     

    展开全文
  • scanf()生效?这里有原理及例程给你

    今天遇到个scanf不生效的问题问题让我百思不得,现我将功能简化为以下函数供大家分享

    #include <stdio.h>
    int main()
    {
    int a =0,b =0;
        while (1)
        {
    printf("intput:");
    scanf("%d,%d",&a,&b);
    printf("%d+%d=%d\n",a,b,a+b);
        }
    getchar();
    }

    很简单的一段代码。

    看下输入及输出结果:

    intput:2

    2+0=2

    intput:2,
    3
    2+3=5
    intput:11
    11+3=14
    intput:14,,
    14+3=17
    intput:14+3=17
    intput:14+3=17
    intput:14+3=17
    intput:14+3=17
    intput:14+3=17
    intput:14+3=17
    intput:14+3=17
    intput:14+3=17
    intput:14+3=17
    intput:14+3=17
    intput:14+3=17
    intput:14+3=17
    intput:14+3=17

    ..

    ..

    ..

    无限循环了。。。

    why?

    根据我对输入的测试,发现只要将输入输成不合理的值,一定会出现死循环

    于是我对函数做了点修改

    #include <stdio.h>
    int main()
    {
    int a =0,b =0;
        while (1)
        {
    printf("intput:");
    scanf("%c,%d",&a,&b);//%d改为%c
    printf("%d+%d=%d\n",a,b,a+b);
        }
    getchar();
    }

    看下结果:

    intput:


    10+0=10
    intput:
    10+0=10
    intput:
    10+0=10
    intput:
    10+0=10
    intput:
    10+0=10
    intput:a
    10+0=10
    intput:97+0=97
    intput:a
    10+0=10
    intput:97+0=97
    intput:
    10+0=10
    intput:a
    10+0=10
    intput:97+0=97
    intput:
    10+0=10
    intput:a
    10+0=10
    intput:97+0=97
    intput:
    当输入字符a的时候会打印两条,

    intput:a
    10+0=10
    intput:97+0=97

    所以我认为asc的10是作为输入被stdin录入scanf了

    所以当a为%d时,一个非法输入加个回车的时候scanf会认为已经有输入了,具体怎么样的处理我还不明白需要大拿解释下原理。

    那么这样的话我写的第一段代码如果有非法输入,或者不按照scanf已经给定的格式输入则会出现死循环。

    怎么处理这个问题呢?

    在代码中加ffush(stdin);就行

    #include <stdio.h>
    int main()
    {
    int a =0,b =0;
        while (1)
        {
    fflush(stdin);//添加后ok
    printf("intput:");
    scanf("%d,%d",&a,&b);
    printf("%d+%d=%d\n",a,b,a+b);
        }
    getchar();
    }

    看运行结果:

    intput:a
    0+0=0
    intput:a
    0+0=0
    intput:a
    0+0=0
    intput:d
    0+0=0
    intput:1
    1+0=1
    intput:1,,
    1+0=1
    intput:1,2
    1+2=3
    intput:

    即使使用非法字符也是ok的。

    scanf函数还有那些陷阱及解决方法,请参见下文。

    具体原理我转载了一篇文章《scanf 用法及陷阱(转)》------from  vanishfan 

    函数名: scanf 
    功 能: 执行格式化输入 
    用 法: int scanf(char *format[,argument,...]);
    scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。
    其调用格式为:      scanf("<格式化字符串>",<地址表>);
    scanf()函数返回成功赋值的数据项数,出错时则返回EOF。
    其控制串由三类字符构成:
     
    1。格式化说明符; 
    2。空白符;
     

    3。非空白符
     ;

    (A)                格式化说明符

    格式字符           说明
    %a                 读入一个浮点值(仅C99有效) 
    %A                 同上
    %c                 读入一个字符
    %d                 读入十进制整数
    %i                 读入十进制,八进制,十六进制整数
    %o                 读入八进制整数
    %x                 读入十六进制整数
    %X                 同上
    %c                 读入一个字符
    %s                 读入一个
    %f                 读入一个浮点数
    %F                 同上
    %e                 同上
    %E                 同上
    %g                 同上
    %G                 同上
    %p                 读入一个指针
    %u                 读入一个无符号十进制整数
    %n                 至此已读入值的等价字符数
    %[]                扫描字符集合
    %%                 读%符号
      %*                指定类型的数据但不保存
    比如:
    百分号(%)与格式符之间的星号(*)表示读指定类型的数据但不保存。因此,
    scanf( "%d %*c %d", &x, &y );
     
    对 10/20 的读入操作中,10 放入变量 x,20 放入 y。       
     
           
    附加格式说明字符表
    修饰符                       说明
    L/l 长度修饰符               输入"长"数据
    h 长度修饰符                 输入"短"数据
    W 整型常数                   指定输入数据所占宽度
    * 星号                       空读一个数据 
    hh,ll同上h,l但仅对C99有效。

    (B)         空白字符
    空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。
    (C)        非空白字符
    一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。但在输入时必须输入这些字符。否则就会出错 。

    注:scanf()控制串知识就介绍到这里(应该比较齐全了^_^),如有遗漏下次补上。下面将结合实际例程,一一阐述.
    三、      scanf()函数的控制串的使用
    例1.
    #include "stdio.h" 
    int main(void) 

    int a,b,c; 

    scanf("%d%d%d",&a,&b,&c); 
    printf("%d,%d,%d/n",a,b,c);
    return 0;
    }  
    运行时按如下方式输入三个值:
    3□4□5 ↙(输入a,b,c的值)
    3,4,5 (printf输出的a,b,c的值)
       (1) &a、&b、&c中的&是地址运算符,分别获得这三个变量的内存地址。
       (2) "%d%d%d"是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab键、回车键分隔。
          以下是合法输入方式: 
          ① 3□□4□□□□5↙
          ② 3↙
             4□5↙
          ③ 3(tab键)4↙
             5↙

    例2.
    #include "stdio.h" 
    int main(void) 

    int a,b,c;
    scanf("%d,%d,%d",&a,&b,&c);
    printf("%d,%d,%d/n",a,b,c);
    return 0;
    }  
    运行时按如下方式输入三个值:
    3,4,5 ↙(输入a,b,c的值)
    或者
    3,□4,□5 ↙(输入a,b,c的值)
    3,□□□4,□5 ↙(输入a,b,c的值)
    ......
    都是合法的,但是","一定要跟在数字后面,如:
    3□,4,□5 ↙就非法了,程序出错。(解决方法与原因后面讲)
    再如:
    1、sacnf()中的变量必须使用地址。
             int a, b;
    scanf("%d%d",a,b); //错误
    scanf("%d%d",&a,&b);
    2、scanf()的格式控制串可以使用其它非空白字符,但在输入时必须输入这些字符。
    例:
    scanf("%d,%d",&a,&b); 
    输入: 3,4 ↙(逗号与"%d,%d"中的逗号对应) 
    scanf("a=%d,b=%d",&a,&b); 
    输入: a=3,b=4 ↙("a=","b=",逗号与"%d,%d"中的"a=","b="及逗号对应)

    3、在用"%c"输入时,空格和“转义字符”均作为有效字符。
    例:
    scanf("%c%c%c",&c1,&c2,&c3); 
    输入:a□b□c↙ 
    结果:a→c1,□→c2,b→c3 (其余被丢弃)

    scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
            ① 遇空格、“回车”、“跳格”键。
            ② 遇宽度结束。
            ③ 遇非法输入。
    问题二:scanf()函数不能正确接受有空格的字符串?如: I love you!

    #include <stdio.h>
    int main()
    {
        char str[80];
        
        scanf("%s",str);
        printf("%s",str);
        return 0;
    }
    输入:I live you!
    输出:I
           scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:(不是结束该scanf函数,scanf函数仅在每一个数据域均有数据,并按回车后结束)。
            ① 遇空格、“回车”、“跳格”键。
            ② 遇宽度结束。
            ③ 遇非法输入。
    所以,上述程序并不能达到预期目的,scanf()扫描到"I"后面的空格就认为对str的赋值结束,并忽略后面的"love you!".这里要注意是"love you!"还在键盘缓冲区(关于这个问题,网上我所见的说法都是如此,但是,我经过调试发现,其实这时缓冲区字符串首尾指针已经相等了,也就是说缓冲区清 空了,scanf()函数应该只是扫描stdin流,这个残存信息是在stdin中)。我们改动一下上面的程序来验证一下:
    #include <stdio.h>
    int main()
    {
        char str[80];
        char str1[80];
        char str2[80];
        
        scanf("%s",str);/*此处输入:I love you! */
        printf("%s",str);
        sleep(5);/*这里等待5秒,告诉你程序运行到什么地方*/
        scanf("%s",str1);/*这两句无需你再输入,是对键盘盘缓冲区再扫描   */
        scanf("%s",str2);/*这两句无需你再输入,是对键盘盘缓冲区再扫描    */
        printf("/n%s",str1);
        printf("/n%s",str2);
        return 0;
    }
    输入:I love you!
    输出:I
          love
          you!
    好了,原因知道了,那么scanf()函数能不能完成这个任务?回答是:能!别忘了scanf()函数还有一个 %[] 格式控制符(如果对%[]不了解的请查看本文的上篇),请看下面的程序:
    #include "stdio.h"
    int main()
    {
        char string[50];
        
         /*scanf("%s",string);不能接收空格符*/
         scanf("%[^/n]",string);
         printf("%s/n",string);
         return 0;
    }
    问题三:键盘缓冲区残余信息问题

    #include <stdio.h>
    int main()
    {
        int a;
        char c;
        do
        {
            scanf("%d",&a);
            scanf("%c",&c);
            printf("a=%d     c=%c/n",a,c);
            /*printf("c=%d/n",c);*/
        }while(c!='N');
    }
       scanf("%c",&c);这句不能正常接收 字符,什么原因呢?我们用printf("c=%d/n",c);将C用int表示出来,启用printf("c=%d/n",c);这一句,看看 scanf()函数赋给C到底是什么,结果是 c=10 ,ASCII值为10是什么?换行即/n.
    对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(/r),一个“换行"(/n), 在这里/r被scanf()函数处理掉了(姑且这么认为吧^_^),而/n被scanf()函数“错误”地赋给了c.
    解决办法:可以在两个scanf()函数之后加个fflush(stdin);,
    还有加getch(); getchar(); 也可以,但是要视具体scanf()语句加那个,这里就不分析了,读者自己去摸索吧。
    但是加fflush(stdin);不管什么情况都可行。
    函数名: fflush 
    功 能: 清除一个流 
    用 法: int fflush(FILE *stream);
    #include <stdio.h>
    int main()
    {
        int a;
        char c;
        do
        {
            scanf("%d",&a);
            fflush(stdin);
            scanf("%c",&c);
            fflush(stdin);
            printf("a=%d     c=%c/n",a,c);
        }while(c!='N');
    }     
    这里再给一个用“空格符”来处理缓冲区残余信息的示例:
    运行出错的程序:
    #include <stdio.h>
    int main()
    {
        int i;
        char j;
        for(i = 0;i < 10;i++)
        {
            scanf("%c",&j);/*这里%前没有空格*/
        }
    }
    使用了空格控制符后:
    #include <stdio.h>
    int main()
    {
        int i;
        char j;
        for(i = 0;i < 10;i++)
        {
            scanf(" %c",&j);/*注意这里%前有个空格*/
        }
    }
        可以运行看看两个程序有什么不同。
    问题四   如何处理scanf()函数误输入造成程序死锁或出错?
    #include <stdio.h>
    int main()
    {
    int a,b,c; /*计算a+b*/
    scanf("%d,%d",&a,&b);
    c=a+b;
    printf("%d+%d=%d",a,b,c);
    }
    如上程序,如果正确输入a,b的值,那么没什么问题,但是,你不能保证使用者每一次都能正确输入,一旦输入了错误的类型,你的程序不是死锁,就是得到一个错误的结果,呵呵,这可能所有人都遇到过的问题吧?
    解决方法:scanf()函数执行成功时的返回值是成功读取的变量数,也就是说,你这个scanf()函数有几个变量,如果scanf()函数全部正常读取,它就返回几。但这里还要注意另一个问题,如果输入了非法数据,键盘缓冲区就可能还个有残余信息问题。
    正确的例程:
    #include <stdio.h>
    int main()
    {
    int a,b,c; /*计算a+b*/
    while(scanf("%d,%d",&a,&b)!=2)fflush(stdin); /*很有趣的代码
    c=a+b;
    printf("%d+%d=%d",a,b,c);
    }
    例如:

    #include<stdio.h> 
    int main() 

    char ch1,ch2; 
    printf("Input for ch1:n"); 
    scanf("%c",&ch1); 
    printf("ch1=%cn",ch1); 
    printf("Input for ch2:n"); 
    scanf("%c",&ch2); 
    printf("ch2=%cn",ch2); 
    }

    表面上看这段程序是没有错的,也可以运行,但运行过程中到 第二个scanf输入值给ch2时,程序并不会停止下来等待你输入,而是直接运行到最后一个printf !

    为什么?当时百思不得其解。。。

    今天上网查了下才知道,原来scanf是从标准输入缓冲区中读取输入的数据,而%c的字符输入格式会接收回车字符,在输入第一个scanf时输入字符后按回车结束,输入缓冲中保存了这个回车符,遇到第二个scanf时,它自动把这个回车符赋给了ch2 。而如果第二个scanf的输入格式不是%c时,由于格式不匹配,这个回车符会被自动忽略,所以只有在连续输入两个%c的格式时才会出现这样的问题!

    解决办法:(二办法任选其一)

    1、清空输入缓冲区

    第一个scanf后加入语句:fflush(stdin); //C语言清空输入缓冲区函数

    2、格式控制中加入空格

    将第二个scanf改为:scanf(" %c",&ch2);//在%号前面加一个空格

    scanf格式输入时要求输入格式与格式控制符中的完全一样(如:scanf("abcd%c",&ch);输入时必须输入abcde,ch得到的值为e)空格可以抵消前面输入的回车符。

     

    总结:可见在scanf函数本身是陷阱重重呀,出现下面的情况的时候要格外小心,i

    1, 多个scanf函数依次出现的时候

         scanf("%c",&ch1);
         printf("ch1=%cn",ch1);
         printf("Input for ch2:n");
         scanf("%c",&ch2);

    2,  当scanf函数输入字符或者输入字符串的时候

          scanf("%s",str);

     

    3, 当scanf函数的输入控制格式中 有多个输入变量的时候

          scanf("%5d %5d %c %c%f%f*f%f",&a,&b,&c1,&c2,&x,&y,&z);

          在这个例子中,就要求如下输入才有效:5 9 f e 6.888 7.99*f6.886

          当在一个scanf函数中出现多个 %c 即字符输入的时候 最好用分隔符(空格     )隔开,以避免把一些不想要的空格或回车读入。


    展开全文
  • ~scanf是什么意思,为什么scanf前加~

    万次阅读 多人点赞 2018-05-26 21:22:54
    scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。scanf("%d%d",&amp;a,&amp;b);函数返回值int型。如果a和b都被成功读入,那么scanf的返回值就是2;如果只有a被成功...
  • 代码 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int demo14() { char arr[100]; scanf("%[^\n]", arr);//使scanf可以以空格结束,而是以\n(换行符)结束 printf("%s", arr); return 0; }
  • C++ :为什么new char[100]分配的数组不能scanf(%s)输入 ``` #include #include #include int main(int argc, char*argv[]) { char *str = new char[1000]; scanf("%s", &str); printf("%s\n",str);...
  • scanf("%d%d%d%d",a,b,c,d); a=(a+9)%10; b=(b+9)%10; c=(c+9)%10; d=(d+9)%10; printf("The encrypted number is %d%d%d%d\n",c,d,a,b); return 0; } ![图片说明]...
  • ``` #include int main(void) { int j;...甚么在输入界面就无法运行输出了,强行回车就会直接退出。 之前试过,只要同时在一个scanf语句中输入%d%c时就会出现这种情况。 求大佬解答一下,谢谢!
  • #include #include int main() { double p,r;int n;...scanf("n=%d\n",&n);...这个函数用键盘输入“n=10”之后按回车键不能立刻输出结果,要再随机输入一个字符后按回车键才能输出结果,为什么???
  • 例如:现在我们键入一个实数,其整数部分三位,...m),意为输入一个长度6的浮点数,换句话说其只能控制输入的宽度。 这个问题可以参考文章:scanf的控制 再看一个例子: scanf("%5d",&n) printf("%d",n...
  • 最近在OJ上编程时发现,scanf不能读入回车和空格两个字符,需要用getchar来读入,程序如下: #include<cstdio> #include<iostream> using namespace std; int main() { int n; char a,b; scanf("%d...
  • int number; scanf("%d",&...就会默认先把缓存里的回车符读入(如果加空格),加空格就可以利用格式化的输入跳过一个字符,而达到你的目的了。 试了下,没有很好的解决办法,似乎加一个空...
  • scanf

    2017-09-15 22:54:28
    scanf() 函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。 其调用格式:scanf(“<格式化字符串>”,<地址表>)。 scanf_s()函数: scanf_s() 的功能虽然与scanf() 相同,但却比 scanf() 安全,...
  • scanf("%d,%d",&p1->num,&p1->score); fflush(stdin); while(p1->num!=0) { n++; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(struct Student *)malloc(LEN); scanf("%d,%d",&p1->num,&p1->score); ...
  • scanf能不能与gets一起用

    千次阅读 2013-04-06 13:44:48
    gets函数可以一次接收一行输入串,其中可以有空格,也就是说空格可以做字符...scanf和gets不能混合使用,如果一个程序中用scanf的话,一般不能再用gets,反之亦然。  当在scanf()后面使用gets()时,程序直接逃过gets
  • //运行中不能改变 #include <iostream> using namespace std; struct student{ int id; char *name; }stu[10]; void main() { stu[1].id=123; stu[1].name="qwe"; //scanf("%d %s",&stu[1].id,&...
  • 对于末位回车符,会把其保存在输入缓冲区,保存在输入缓冲区中的末位回车符能否下次scanf()所接收。要视scanf()中输入类型决定。仅字符型变量scanf("%c",&a)可以接收回车。 实验对比结果如下: 1.scanf()...
  • scanf("%s",pStr);//出错点 printf("%s\n",pStr); return 0; } 运行上面程序,会出现一个内存错误:Segmentation fault Why? 你可能是这样想的: 1.pStr指针指向数组的首地址 2.利用scanf将键盘上的数据存放...
  • scanf函数输入为什么要加&

    千次阅读 2019-09-26 17:06:49
    对于scanf函数,它将参数视一个地址,将键盘输入的字符传到这个地址中去,通常我们都是用的&地址的符号,事实上如果一个值恰好是一个地址的话,加&也一样可以的: 如下例(测试环境Win7 64位): #...
  • scanf()中的%c 不能正常输入的问题

    千次阅读 2014-08-04 12:46:36
    #include int main() { char a; int b; scanf("%d",&b); scanf("%c",&a); /******************************/ printf("%d",b); printf("%c",a); return 0;... 应该输入一个整型一个字符型变
  • printf("请输入学校人员信息:\n"); /*提示信息*/ printf("身份 姓名 编号 性别 职务 班级 是否继续\n"); scanf("%s",&pNew->cStatus); /*输入信息*/ scanf("%s",&pNew->cName); scanf("%d",&pNew->iNumber)...
  • scanf 输入字符时,不会跳过空格,空格也会被当做字符读取,只有在输入其他数据类型时,才会跳过空格 OJ程序设计与算法(1)第二周检测第五题对齐输出问题:输入123456789 0 -1,右边对齐输出; 使用如下代码输出...
  • 由于scanf("%c",&amp;d)这个语句会把回车和空格也当成字符输入进去,所以这个输时一定要注意格式!!输入一个数,加回车时间有两种方法去回车:1.getchar();scanf("%c",&amp;n); //...
  • 首先在C语言中,输入变量的语法是:scanf("格式控制","变量地址") 可以看出,第二个的格式变量地址。 在C语言中,变量在定义之后,就会在计算机内存中非配一块空间给这个变量,该空间在内存中的地址称为变量的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 756,389
精华内容 302,555
关键字:

为什么scanf不能输入