10.28 scanf的%lf 和非字符数组无\0

发布于 26 天前  215 次阅读


在 scanf 中,%lf 应该改为 %f,因为 n 是 float 类型,而 %lf 是用于 double 类型的

你一直弄错了,哥们,printf打印时,都使用%f,因为在 printf 中,float 会被自动提升为 double(反正用%f就是了,就是这么个死东西)

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main() {
	float n;
	int m;
	scanf("%f %d",&n,&m);
	for (int i = 1; i <= m; i++) {
		for (int j = 0; j < i; j++) {
			printf("%6.2f",n);
			if (j == i - 1) {
				printf("\n");
			}
		}
	}
	return 0;
}

这种嵌套循环也要动脑子,你tm刚开始无脑int i和int j都为0 ?


数组下标的问题,字符结束符字符结束符,你猜他为什么叫字符结束符?那你定义的整型int数组还要给\0留位置?疯了!


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main() {
	int arr[10];
	for (int i = 0; i < 10; i++) {
		scanf("%d", &arr[i]);
	}
	for (int i = 0; i < 10; i++) {
		int max = arr[i];
		int trues;
		int j = i+1;
		for (; j < 10; j++) {
			if (arr[j] > max) {
				max = arr[j];
				trues = j;
			}
		}
		if (max != arr[i]) {
			int temp = arr[i];
			arr[i] = max;
			arr[trues] = temp;
		}
	}
	for (int i = 0; i < 10; i++) {
		printf("%d ", arr[i]);
	}
	return 0;
}

重走来时路,发现还是不能一气呵成写完美

max和trues(为什么是trues呢,因为true是C语言中的关键词,不用最好,但我用了竟然可以运行)的定义的必要性

max用来做两个if的判断条件,第一次是比较arr[ i ]后面的数字是不是比arr[ i ]大,第二次是判断内存循环结束后是否要进行互换值的操作(这个最为关键,因为你必须考虑如果顺序就是对的,第一次if语句不会执行,那么trues的值就失去了意义),如果你不使用max,你将发现你的大脑必须想更多的东西

trues是为了保留每次第一个if语句执行时j的值,因为j会动态变动直至9,所以你必须设置变量去保留它

最后,记得j从i+1开始,这是你可以减轻程序负载的地方


输入一行电报文字,将字母变成其下一字母(如’a’变成’b’……’z’变成’a’其它字符不变),包括空格

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>

int main() {
	char str[999];
	fgets(str,999,stdin);
	for (int i = 0; i < strlen(str)-1; i++) {
		if (str[i] >= 'a' && str[i] < 'z' || str[i] >= 'A' && str[i] < 'Z') {
			str[i] += 1;
		}
		else if (str[i] == 'z') {
			str[i] = 'a';
		}
		else if (str[i] == 'Z') {
			str[i] = 'A';
		}
	}
	for (int i = 0; i < strlen(str) - 1; i++) {
		printf("%c", str[i]);
	}
	return 0;
}

特殊点是z和Z,同时请考虑fgets最后保留的换行符(不想将他替换就不把他打印出来不就行了,haha)

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