我从输入文件中填充10 x 10个字符的网格。 我需要检查网格是否是正方形(即,有N×N个字符,其中N <= 10)
输入文件是这样的:
import numpy as np
name_list = ['jane doe' ,'sally smooth']
score = np.array([[102,],[106,]]) #make a numpy array
row_format ="{:>15}" * (len(name_list))
for name, row in zip(name_list, score):
print(row_format.format(name, *row))
当我在gdb中打印网格时,我得到以下结果:
jane doe 102
sally smooth 106
我的主函数中检查网格是否有效的部分是:
pitk
olpe
pkey
tope
checknxn功能:
$1 = {"pitk\000\000\000\000\366h",
"olpe\000\000\001\000\000",
"pkey\000\000\000\000\000",
"tope\000\000\000\000\000",
"\000\344\241\367\377\177\000\000", <incomplete sequence \336>,
"\000\377\377\177\000\000\037\355\336", <incomplete sequence \367>,
"\000\177\000\000\000\000\000\000\000",
"\000\000\000\000\000\000\000\000\000",
"\000\000\000\000\000\000\000\000\r\020",
"\000\000\000\000\000\000\000\000\000"}
这返回false,即使输入网格在这种情况下有效,我的程序也会退出。
我无法弄清楚为什么checknxn函数在这种情况下返回false。
更新:这是我初始化网格的方式:
bool check = (checknxn(grid));
if(check == false) {
fprintf(stderr, "Invalid Input!\n");
exit(0);
}
答案 0 :(得分:1)
你的网格没有完全初始化(你没有将每个单元格设置为例如:\0
)所以你只有字符串和每个字符串的开头行正确定义。当你这样做的时候,初始化网格,你没有检查单元格是NULL
,因为它们不是指针而是实际内容,所以你检查例如:\0
如果你已经初始化了网格到那个值。
编辑
要初始化该网格,您可以执行类似
的操作char grid[10][10];
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
grid[i][1j] = '\0';
}
}
然后才做馅料。不要混合它。
如果您想检查每个单元格是否已填充,那就是:not \0
for(int i=0;i<rows;i++) {
for(int j=0;j<columns;j++) {
if(grid[i][j] != `\0`) {
return false;
}
}
}
但是你想在其中加载C字符串,C字符串以\0
结尾。将字符串加载到没有尾随\0
的单元格中,或者调整循环以检查row_length-2
而不是row_length -1
。
如果你有字符串,一个更简单的方法:测量每个行中的字符串长度,如果它们都是相同的,行数对应于字符串长度你有一个方格。 / p>
答案 1 :(得分:1)
经典C错误未初始化数据。 Memset可能是要走的路(见下文)。
memset(grid, 0, sizeof(grid[0][0]) * rows * columns);