做题时遇到的一些小技巧
1.用getchar()控制输入数组的元素个数
#include <stdio.h>
int main(void)
{
char c[100] = {0};//储存输入数据用的数组
int i = 0;//记录输入的字符个数方便输出
char z = 0;//解决方法就是加入临时变量来先储存再判断
while(1)
{
z = getchar();//先储存输入的数据
if(z == ‘\n’)//再判断
break;//如果是回车就退出循环
c[i] = z;//如果不是回车就存储
i++;//计数加一
}
for(int k = 0;k < i;k++)
printf("%c", c[k]);//把储存的数据输出
printf("\n");
return 0;
}
精简款
#include <stdio.h>
int main(void)
{
int i = 0;
char c[100] = {0};
while((c[i++] = getchar()) != '\n');
for(int k = 0;k <= i;k++)
printf("%c", c[k]);
return 0;
}
2.给计算数据赋初值的问题
在计算处理数据时,总是忘记给数据赋初值,导致编译成功,但是计算输出都是错误值。
没有加static,默认为auto 型,此时,不给初值,变量的初值是随机的。
如果加了static不给初值,变量的初值是默认的 0。
其实不能说不赋初值就不行,对于局部变量,不赋初值的话,其实他里面存的是一个随机的值,谁也不知道他是多少,因此如果没赋初值的情况下就使用它,程序是完全不可控的。
3.do while和while的一些妙用
做题是总是用for循环,但是有些情况用while和do while显然更好,后做题再补充吧
4.输出控制字符所占字节长度问题
写C++程序时,有时题目要求输出格式是%5d之类的,但是不想用C语言,后面查询发现C++兼容C的scanf和printf语句。
C语言是C++语言的一个子集,也就是说,C语言完全可以不加修改直接用于C++的(当然,C++对类型的检查比C严格,你的C格式要符合C++语法才可以的),printf函数在iostream中有定义,所以可以执行。
而scanf及printf在C或C++中,结果一样的。
在C++程序中需要格式化输入时,就可以直接用scanf的格式化输入的
cin/cout/scanf/printf