10.18 下午 练习笔记

发布于 4 天前  24 次阅读


//上午 上课的时候

就是如果整数除以整数,必定结果是整数,你就是用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

届ける言葉を今は育ててる
最后更新于 2024-10-19