C语言变量型报错:表达式必须具有整数或未区分范围的枚举类型,是用未初始化的内存“z”和小标不是整型


#include 
#include 
using namespace std;
int main() {
    double lat1, lon1, lat2, lon2, x, y;
    cout << "请输入纬度1(单位:度):" << endl;
    cin >> lat1;
    cout << "请输入经度1(单位:度):" << endl;
    cin >> lon1;
    cout << "请输入纬度2(单位:分):" << endl;
    cin >> lat2;
    cout << "请输入经度2(单位:分):" << endl;
    cin >> lon2;
    char arr[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','I','S','T','U','V'};
    x = (lat1 + 5) / 6;
    y = (lon1 + 5) / 6;
    int z = arr[x];
    cout << "1:100万图幅编号" << z << "—— " << y << endl;
    return 0;
}


有三个错误:表达式必须具有整数或未区分范围的枚举类型,是用未初始化的内存“z”和小标不是整型

#include <iostream>
#include <math.h>
using namespace std;
int main() {
    double lat1, lon1, lat2, lon2;
    cout << "请输入纬度1(单位:度):" << endl;
    cin >> lat1;
    cout << "请输入经度1(单位:度):" << endl;
    cin >> lon1;
    cout << "请输入纬度2(单位:分):" << endl;
    cin >> lat2;
    cout << "请输入经度2(单位:分):" << endl;
    cin >> lon2;
    char arr[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','I','S','T','U','V'};
    int x = (int)((lat1 + 5) / 6); // 修改
    int y = (int)((lon1 + 5) / 6); // 修改
    if (x >= 0 && x < sizeof(arr)/sizeof(arr[0])) { // 新增
        cout << "1:100万图幅编号" << arr[x] << "—— " << y << endl; // 修改
    } else {
        cout << "x值超出范围" << endl; // 新增
    }
    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7752199
  • 除此之外, 这篇博客: Z字形扫描矩阵与回字形扫描矩阵中的 回字形扫描 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    题目:按照顺时针或逆时针的顺序,旋转向内扫描矩阵。一般使用数字从1到N标记矩阵元素来模拟这一过程。
    思路:
    1、观察矩阵中左右相邻元素的数值关系较为复杂,因此采用模拟旋转过程的方法扫描矩阵。分别设置四个哨兵,看守上下界、左右界,扫描碰到哨兵就转向(同时哨兵往内缩一步)。

    #include <cstdio>
    #include <cstdlib>
    
    void printHuiZi(int** m, int n) {
    	int upb = 0;		// upper bound
    	int lob = n - 1;	// lower bound
    	int lfb = 1;		// left bound
    	int rtb = n - 1;	// right bound
    	int i = -1, j = 0;
    	int cnt = 1;
    	while (cnt <= n * n) {
    		for (++i; i <= lob; ++i)
    			m[i][j] = cnt++;
    		lob--;			// update bound
    		i--;			// pullback i
    		for (++j; j <= rtb; ++j)
    			m[i][j] = cnt++;
    		rtb--;
    		j--;
    		for (--i; i >= upb; --i)
    			m[i][j] = cnt++;
    		upb++;
    		i++;
    		for (--j; j >= lfb; --j)
    			m[i][j] = cnt++;
    		lfb++;
    		j++;
    	}
    	for (i = 0; i < n; i++) {
    		for (j = 0; j < n; j++)
    			printf("%4d", m[i][j]);
    		printf("\n");
    	}
    }
    
    
    int main() {
    	int n;
    	printf("Input the dimension : ");
    	scanf("%d", &n);
    	int **x = new int*[n];			// allocate 2-dim array
    	for (int i = 0; i < n; i++)
    		x[i] = new int[n];
    	printHuiZi(x, n);
    	for (int i = 0; i < n; i++)		// free heap space
    		delete[] x[i];
    	delete[] x;
    	return 0;
    }
    

    结果:

    Input the dimension : 7
       1  24  23  22  21  20  19
       2  25  40  39  38  37  18
       3  26  41  48  47  36  17
       4  27  42  49  46  35  16
       5  28  43  44  45  34  15
       6  29  30  31  32  33  14
       7   8   9  10  11  12  13
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^