//上午 上课的时候
就是如果整数除以整数,必定结果是整数,你就是用double去兜着这个结果,它也是整数,只不过是加了小数点和0
//经验:sum求和先写,最后进行下一步循环的新赋值(大概率会新定义变量以保留和利用原变量值)操作
gets()
是一个用于从标准输入读取一行字符串的函数,它括号里面直接填变量名(整个数组的话也类似scanf中的&,不加【】)或字符就行了
它会读取输入直到遇到换行符(\n
),并将读取的内容存储在提供的字符数组中。使用 gets()
时,输入的换行符会被替换为字符串结束符(\0
),以标识字符串的结束
具体的好处是可以将空格键常规化,避免输入空格键使之进入到下一个格式占位符中
不安全:gets()
函数是非常不安全的,因为它不检查输入的长度。如果用户输入的字符串超过了数组的大小,会导致缓冲区溢出,可能会引发安全漏洞。因此,gets()
在 C11 标准中被弃用,不推荐使用
fgets()
是 C 语言中用于从标准输入读取字符串的函数,具有比 gets()
更安全的特性
fgets(str, sizeof(str), stdin)
str
: 指向一个字符数组的指针,用于存储读取的字符串(具体的使用可以就是变量名)n
: 要读取的最大字符数(包括结束符\0
)(这里就是指sizeof(变量名),这样可以保证缓冲区不被溢出)stream
: 输入流,通常为stdin
,表示标准输入
其中,加上string.h的头文件,使用strlen函数没有sizeof函数好,因为fgets
的第二个参数应该是缓冲区的大小,而不是字符串的长度
其次,strlen(a)
在fgets
之前调用时会返回0,因为a
是空的(我在前面没有初始化,所以数组变量a实际值是0)
而且,使用 fgets()
时,输入的字符串末尾可能会包含换行符 \n
,这是因为 fgets()
会读取包括换行符在内的输入
int main() {
int letter = 0,figure = 0,space=0,other=0;
char a[100];
fgets(a,sizeof(a),stdin);
for (int i = 0; i < strlen(a); i++) { if (a[i] >= 'a' && a[i] <= 'z' || a[i] >= 'A' && a[i] <= 'Z') { letter++; } else if (a[i] >= '0' && a[i] <= '9') {
figure++;
}
else if (a[i] == ' ') {
space++;
}
else {
other++;
}
}
printf("%d %d %d %d", letter, figure, space, other);
return 0;
}
所以最后fgets输入的最后一个字符是\n 这不是我们想要的,应该加上else if条件不将其计入other
比如,加上
else if (a[i] == '\n') {
break;
}
就很好
如果你想用几的几次方 来参与运算,那么可以使用 pow
函数来实现
前提是你需要引入math.h的头文件
pow(10, i)就表示10i
Comments NOTHING