首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

scanf函数永远的痛啊该怎么处理

2012-03-26 
scanf函数永远的痛啊~~C/C++ code#include stdio.hint main(){int i char a[5] for(i 0 i 5 i

scanf函数永远的痛啊~~

C/C++ code
#include <stdio.h>int main(){    int i ;    char a[5] ;    for(i = 0 ; i < 5 ; i++)    {        scanf("%c ",a + i) ;            }    for(i = 0 ; i < 5 ; i++)    {        printf("%c ", a[i]);    }}


代码很简单。我要实现的功能:
输入:a b c d e
输出:a b c d e
很显然我的代码有问题,在我的基础上改改看,必须得用for循环,必须的用到参数i。这个scanf以前只知道用,一直没有好好研究它。大侠们多多指点吧。

[解决办法]
输入的时候 a b c d e 回车然后ctrl+z即可
[解决办法]
或者这样试试,可以实现打一个数字按一下回车
C/C++ code
for (int i = 0;i < 5;i++)    {        scanf("%c",&a[i]);        std::cin.ignore();        std::cin.clear();    }
[解决办法]
scanf(" %c",a + i) ;
这样算不算?

[解决办法]
C/C++ code
#include <stdio.h>int main(){    int i ;    char a[5] ;    for(i = 0 ; i < 5 ; i++)    {        scanf("%c ",a + i) ;         fflush(stdin);//有牛说过这是未定义行为??                }    for(i = 0 ; i < 5 ; i++)    {        printf("%c ", a[i]);    }}
[解决办法]
#include <stdio.h>
int main()
{
int i ;
char a[5] ;
for(i = 0 ; i < 5 ; i++)
{
scanf("%c",a+i) ; 
getchar();
}
for(i = 0 ; i < 5 ; i++)
{
printf("%c ", a[i]);
}

getch();
}
[解决办法]
C/C++ code
    int i ;    char a[5] ;    for(i = 0 ; i < 5 ; i++)    {        scanf(" %c", a + i) ;            }    for(i = 0 ; i < 5 ; i++)    {        printf("%c ", a[i]);    }
[解决办法]
对于scanf来说,其中可以用%c %s %d %f等等,除了%c,其它默认会跳过空格,换行的。
eg:
int a;
char b;
scanf ("%d",&a);
scanf ("%c",&b);
输入:如果你输入一个数,再回车程序就结束了,b的值是:'\n';
输入: 如果你输入是一个数,再输入一个空格,按回车结束,那么b的值就是' ';
希望对你有用。如果你想详细的高清楚,建议你看一本书(c和指针);
[解决办法]
探讨

你这个是对的,我当时弄错了,不好意思,能解释为什么吗?为什么那个空格放在%c后面就不行?
引用:

scanf(" %c",a + i) ;
这样算不算?

[解决办法]
貌似多了个控空格
[解决办法]
为什么空格在后面不行,在前面就可以
[解决办法]
第一眼看很简单,然后发现问题不小,等下测试下
[解决办法]
C/C++ code
#include <stdio.h>int main(void){    int i;    char a[5];    for(i = 0 ; i < 5 ; i++)    {        scanf("%c", a + i) ;        /********        * 没办法, 说明符就是 %c, 所以空白字符也被当成了输入字符!        * 总不能不把回车当字符吧?        * 所以要么用这种方法, 要么用其他的输入函数, 再要么就费劲的 Ctrl+Z.        **************/    }    getchar();  // ^_^    for(i = 0 ; i < 5 ; i++)    {        printf("%c ", a[i]);    }    return 0;}
[解决办法]

探讨
嗯 我也想知道为什么?

引用:

为什么空格在后面不行,在前面就可以


[解决办法]
探讨

C/C++ code

int i ;
char a[5] ;
for(i = 0 ; i < 5 ; i++)
{
scanf(" %c", a + i) ;
}
for(i = 0 ; i < 5 ; i++)
{
printf("%c ", a[i]);
}

[解决办法]
C/C++ code
#include <stdio.h>int main(){    int i ;    char a[5] ;    for(i = 0 ; i < 5 ; i++)    {        if (i < 4) {            scanf("%c ", a + i) ;          } else {            scanf("%c", a + i) ;          }         }    for(i = 0 ; i < 5 ; i++)    {        printf("%c ", a[i]);    }        while(1);}用个if不知道满足LZ条件不?
[解决办法]
探讨
C/C++ code

#include <stdio.h>

int main()
{
int i ;
char a[5] ;
for(i = 0 ; i < 5 ; i++)
{
if (i < 4) {
scanf("%c ", a + i) ;
} else {
……

[解决办法]
"%c " 这里的空格不单指一个空格,而是所有的后继空白符。空格,制表,换行都是空白符。%c后面的空格吃掉了所有的空白符

要是下面这些输入,你的代码也都能结束。 
a b c d ef
-------------------
a b c d e f
-----------------------
a b c d e 

f
--------------------

热点排行