| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1429 人关注过本帖, 1 人收藏
标题:为什么scanf语句不执行?求指教!
只看楼主 加入收藏
木朵夕年
Rank: 1
等 级:新手上路
帖 子:25
专家分:8
注 册:2013-6-14
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:10 
为什么scanf语句不执行?求指教!
#include<stdio.h>
#include<string.h>
void paixu(int a[10],int *p);
int main()
{
    int i,k;
int stu[10];
int *p;
char string1[100],string2[100];
char *t;

p=stu;
for(i=0;i<10;i++)
{
    scanf("%d",(p+i));
}
printf("the scores:\n");
for(p=stu;p<(stu+10);p++)
{
    printf("%d ",*p);
}
printf("\n");
t=string1;
printf("输入student score\n");

for(i=0;i<100;i++)
{

   scanf("%c",(t+i));/* 这一句为什么不执行?*/
   if(*(t+i)=='\n')
   {k=i;break;}
}
strncpy(string2,string1,k);
puts(string2);
 paixu( stu, p);
for(p=stu;p<(stu+10);p++)
{
    printf("%d\n",*p);
}



return 0;
}
 void paixu(int a[10],int *p)
 {
     int i,j;
     int x;
    for(j=0;j<9;j++)
         for(p=&a[0],i=0;i<9-j;i++)
         {
             if(a[i]<a[i+1])
             {
                 x=*(p+i);
                 *(p+i)=*(p+i+1);
                 *(p+i+1)=x;
             }
         }
 }
搜索更多相关主题的帖子: include scores 
2013-06-18 17:17
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
for(i=0;i<100;i++)
{

   scanf("%c",(t+i));/* 这一句为什么不执行?*/
   if(*(t+i)=='\n')
   {k=i;break;}
}

在这个for之前加上一句   fflush(stdin);   作用是清空缓冲区
因为你之前输入一个数组后最后会按回车键入    而这个回车会直接键入到下面的 string1 中所以清空下

三十年河东,三十年河西,莫欺少年穷!
2013-06-18 17:50
suixinwuji1
Rank: 2
等 级:论坛游民
帖 子:11
专家分:13
注 册:2013-6-12
收藏
得分:0 
就没加&取地址符?
2013-06-18 18:10
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 3楼 suixinwuji1
看好   他定义的是指针

三十年河东,三十年河西,莫欺少年穷!
2013-06-18 18:24
犿蚂
Rank: 2
等 级:论坛游民
帖 子:29
专家分:23
注 册:2013-4-24
收藏
得分:0 
scanf("%c",(t+i));你需要把从键盘上得到的字符储存在(t+i)的地址里  要加的取地址符“&”,即scanf("%c",&(t+i));
2013-06-18 20:46
sisox
Rank: 2
等 级:论坛游民
帖 子:19
专家分:28
注 册:2012-1-25
收藏
得分:5 
是指针的话不用加&  2L是正解
关于scanf()的原理建议LZ看下 http://blog.
因为你for中有个关于 '\n'的if语句 所以break了
2013-06-18 21:37
序曲萧邦
Rank: 2
等 级:论坛游民
帖 子:45
专家分:41
注 册:2012-11-17
收藏
得分:0 
回复 2楼 韶志
怎么知道要用这个函数的,这个在c中都没怎么讲,得学哪些书才能知道呢?

新手学c中。还望多多指教
2013-06-18 21:48
浪漫横行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:127
专家分:291
注 册:2013-4-30
收藏
得分:5 
for(i=0;i<100;i++)//这里好像是99,因为一般最后存'\0'
 {

    scanf("%c",(t+i));/
    if(*(t+i)=='\n')
    {k=i;break;}
 }
在这句语句前加getchar();就行了。
2013-06-18 21:51
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:10 
回复 7楼 序曲萧邦
呵呵  学多了  看多了自然就知道了   你现在就知道了
这个函数被包含在#include<stdio.h>头文件中,作用就是清空输入缓冲区,
通常是为了确保不影响后面的数据读取(例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行 fflush(stdin);
不过有一点   此函数只适用于部分编译器(如我的VC6)  有的不可以(如gcc3.2)

楼主的程序还有个解决办法  就只在for之前加上getchar();也可以   作用一样  接收回车键

三十年河东,三十年河西,莫欺少年穷!
2013-06-18 21:57
ceoooec
Rank: 2
等 级:论坛游民
威 望:1
帖 子:26
专家分:61
注 册:2013-6-11
收藏
得分:0 
问下要是只将scanf("%c",t+i);改成scanf(" %c",t+i);可以吗? 就是在%c前面加上一个空格。
2013-06-18 23:20
快速回复:为什么scanf语句不执行?求指教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019659 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved