回 帖 发 新 帖 刷新版面

主题:求助~新手问前辈们问题啦~

呃。先来点题外话,呃自学C语言,天资愚钝,这全是学习中积累下来的问题,因为不能天天上网,就堆一块了,各位懒得全解答就打个标号解答一个吧,有一个算一个,谢谢了!
(备注:运行环境TC2.0,我本来下了个Visual Studio 2008,根本不会用,汗)




1******************************************************************
代码如下:
  int a,b,c;
  scanf("%d,%2d,%d",&a,&b,&c);
  printf("%d,%d,%d",a,b,c);

输入:66,335,220
运行结果:66,33,3189   那个3189是怎么回事,应该是220啊!
2*******************************************************************
char name[20],中括号里面的20的作用是什么?貌似可以扩大字符变量的长度~
3*******************************************************************
代码如下:
printf("%d\n",NULL);
运行结果:0
我当时做题的时候就在想,要么是NULL的每个字符的二进制码凑一块以后,再以整型数的形式输出

(超出%d的有效位数的话,就取低位的输出),比较天真。。。
麻烦各位分析分析为什么~
4*******************************************************************
代码如下:

为了简洁,部分用中文描述

定义了5个字符变量i,j,k,m,n并分别给予初始值'a','b','c','\101','\116'

printf("a%cb%c\tc%c\tabc\n",i,j,k);
printf("\tb%c%c\n",m,n);

运行结果(以^表示空格):

aabb^^^^cc^^^^^^abc
^^^^^^^bAN

问题:转义字符\t的作用该始终如一啊,怎么一会跳4格一会跳6、7格的,那个TC2.0我简直对其无

语!!!尽是些匪夷所思的问题。。。
5*******************************************************************
求前辈看看我的作业有错~求指正~

用C语言描述下列语句:

1.i小于j或小于k------------- i<j||i<k;

2.i和j都小于k--------------- i<k&&j<k;

3.i和j中有一个小于k--------- i<k&&j>=k||i>=k&&j<k;

4.i是非正整数----------- int i; i<=0;

5.i是奇数---------------- int i; i%2==1;

6.i不能被j整除----------------- i%j!=0;

7.用条件表达式取3个数中的最大值-------- (不会做。。。)

回复列表 (共4个回复)

沙发

2:
中括号中“20”的作用是指定 name 这个数组可以包含的最大字符个数,一旦在声明的时候指定了那么在使用的过程中就不能改变其长度值了;
3:
“NULL”在 C 语言中就是一个代表什么都没有的“空”值,如果以“%d”输出就是“0”,如果以“%c”输出就是'',如果以“%s”输出就应该是""了,它只代表每种类型下的空值;
4:
显然答案是正确的,Tab 键的作用是跳过当前所在的 8 个字符位置,也就是说 8 个字符为一个区域,“aabb^^^^”就是一个区域,所以你在 b 后面输出“\t”那么就是跳出这个区域而已,“cc^^^^^^”是第二个 8 字符区域,那么“c”后面的“\t”只是跳出这 8 个字符区域而已,“^^^^^^^bAN”也是同理,先跳过 8 个字符(一个 8 字符区域),然后输出接下来的字符“b”(“b”前面是不是少了一个“^”呀?),希望你能理解;
5:
只说最后一个“用条件表达式取3个数中的最大值”,假设三个数 Number1,Number2,Number3,最大值为:
((Number1>=Number2)?Number1:Number2)>=Number3?((Number1>=Number2)?Number1:Number2):Number3
似乎有更好的办法,有一段时间没动编程了,快忘了。

板凳


[em2]太谢谢了~

3 楼


第一问scanf是格式化输入函数,
  scanf("%d,%2d,%d",&a,&b,&c);
函数默认遇到空字符或者空格终止输入
%d,%2d,%d为格式化字符,所以输入时应该66,335,220
后第一个为66没错,然而第二个为%2d表示保留整数2位,因此为33,还剩下5,220,由于编译器不知道第三个数字的位置,估计是判定为无效字符了吧,所以是一个随机值

4 楼

同意楼上的观点,这里由于编译器判定读入的为一个非整数值,所以并没有给c赋值,这时输出的c的值为c初始分配的内存中保存的值。

我来回复

您尚未登录,请登录后再回复。点此登录或注册