| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5759 人关注过本帖
标题:新手求教,printf 后面为什么不加scanf函数,加了为什么输出的结果是错的?
只看楼主 加入收藏
woshishuaigg
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-9-19
收藏
 问题点数:0 回复次数:4 
新手求教,printf 后面为什么不加scanf函数,加了为什么输出的结果是错的?
#include<stdio.h>
int main(void)
{
    int digit,letter,other;
    char ch;
    int 1;
    digit=letter=other=0;
    printf("Enter 10 characters:");
 
    for(i=1;i<=10;i++)
        ch=getchar();
    if(ch>='a'&&ch<='z'||ch>='A'&&ch<='z');
        letter++;
    else if(ch>='0'&&ch<='9')
        digit++;
    else
        other++;
}
    printf("letter=%d,digit=%d,other=%d\n",letter,digit,other);
return 0;
}
     后面的我省略啦,就是printf 后面为什么不加scanf函数
    加了为什么输出的结果是错的???
搜索更多相关主题的帖子: include return letter Enter 
2016-09-19 14:21
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
&是取地址运算符。和指针有关系。
printf不用加&,scanf()加&,涉及到函数传参的问题。我相信你还没学到那一块。解释起来蛮麻烦的。

等你学到了自己自然就会联想到这件事。

φ(゜▽゜*)♪
2016-09-19 14:26
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
能不能将你省略的代码用/*……*/的方式写出来,别人可以一目了然,看明白你想问什么
2016-09-19 15:47
lotoze
Rank: 1
等 级:新手上路
威 望:1
帖 子:13
专家分:5
注 册:2016-9-18
收藏
得分:0 
我也是新手,但我说下我的理解,也请大牛点评一下,首先你得问题没有说清楚,我不知道是怎么把scanf函数放在printf函数的后面
第一种:#include <stdio.h>

int main()
{
    int a, b, c;


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

   
    return 0;
}
第二种:
    printf("%d, %d, %d\n",scanf("%d %d %d", &a, &b, &c););
第三种:
printf("scanf("%d %d %d",&a,&b,&c);");
第四种:printf("%d, %d, %d\n", &a, &b, &c);
我的理解是:如果是第一种情况我是从逻辑错误上理解的,虽然程序能够正常运行,但C语言是面向过程的语言,程序一步一步的向下运行,按照逻辑是先输入给变量的地址植入数据,再用printf函数输出变量地址中的数据,要是这种情况的话只能先输出,但变量abc中的地址没有数据,也没有分配地址给abc变量所以输出的是内存中的垃圾数据;如果是第二种情况则是语法错误,printf函数的使用格式不正确;如果是第三种我做的测试是分号的问题;如果printf函数输出字符串它是依次的寻找与它最近的分号相匹配,但在后面还有两个分号,程序不会那么是智能的,也不会输出字符串scanf("%d %d %d",&a,&b,&c);所以也会出现语法错误;第四种情况虽然也能正常运行,但结果不是我们所要的,它是以整型的格式输出&a、&b、&c在内存中的地址信息,而不是地址中的我们所输入的数据;所以结果也是不正确的;scanf函数是输入函数,printf是一个输出函数,虽然两者都属于c语言编译系统中的库函数,但它们在功能上却是不同的,可以说是恰恰相反。以上的是我的理解,不知道上面的几种情况那种是你所说的。没有把握一定正确,只是我自己的理解。也请大家多多指教。
2016-09-19 22:08
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
不好意思,之前没有认真看代码,以为你是问&和print,scanf的问题.
程序代码:
int main(void)
{
    int digit,letter,other;
    char ch;
    int 1;
    digit=letter=other=0;
    printf("Enter 10 characters:");


    for(i=1;i<=10;i++)     //这个for循环只做了一件事,ch=getchar();后面的if else 是独立的语句块。sir,你漏了{花括号}了
        ch=getchar();
    if(ch>='a'&&ch<='z'||ch>='A'&&ch<='z');//这里多了一个分号,,。。
        letter++;
    else if(ch>='0'&&ch<='9')//其实上面多了分号,这里应该编译的时候会报错啊,else 找不到匹配的if
        digit++;
    else
        other++;
}//哇!这里都知道有右括号,,,左括号类?
    printf("letter=%d,digit=%d,other=%d\n",letter,digit,other);
return 0;
}




φ(゜▽゜*)♪
2016-09-19 22:17
快速回复:新手求教,printf 后面为什么不加scanf函数,加了为什么输出的结果是错 ...
数据加载中...
 
   



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

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