我有一个包含15个字符串的数组(并不一定都必须使用),尽管在任何地方都读到gets
永远不应该使用,但出于某种原因我认为对我来说最方便这个计划。
在提示用户指定他想要的行数和列数后,为了创建矩阵,我要求他输入矩阵值,一次每行一行。我使用gets
执行此操作。同时,我想在字符串中扫描输入的空格量,以确保用户输入的数字量与指定的列数相对应。
最后我要打印出我输入的第二行。
您可以假设已经定义了rowone
和colone
,我只是没有复制该部分代码以节省空间。
int i=0, rowone, colone, sbar=0, inputs=0;
char matrixone[15][10000];
......
printf("input your matrix\n");
for (i=0;i<rowone;i++){
gets(matrixone[i]);
while(matrixone[i][inputs]!='\n'){
if (mplier[i][inputs] == ' '){
sbar++;
inputs++;
}
else
inputs++;
}
if (sbar>=colone||sbar<colone-1){
printf("Too many/too few inputs per line\n");
main();
}
sbar = 0;
inputs = 0;
}
puts(matrixone[2])
我在编译时收到警告,并且最终甚至没有机会输入矩阵,因为“太多/太少的输入”总是弹出。
非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
无限循环。
或者更确切地说,最终import threading
import time
master_wish = True # global variable
def kill_all_demons(demon):
while True:
print "killing %s\n" % demon
if not master_wish:
return
def van_helsing():
print "Yes Master your wish is my command"
t1 = threading.Thread(target=kill_all_demons, args=('Dracula',))
t2 = threading.Thread(target=kill_all_demons, args=('Wolf',))
t1.start()
t2.start()
def other_func():
global master_wish
master_wish = False
print("good will prevail over evil")
van_helsing()
time.sleep(10)
other_func()
访问的方式超出了它的读取范围,可能超出了数组本身。这会导致未定义的行为(UB)。
matrixone[i][inputs]
消费,但不保存gets()
。
'\n'
相反,删除gets(matrixone[i]);
while(matrixone[i][inputs]!='\n'){ // why should this quit?
...
inputs++;
}
,因为它从语言中删除了5年,使用gets()
,检查返回值并查找字符串的结尾
fgets()
建议OP(猜测OP的目标)
if (fgets(matrixone[i], sizeof matrixone[i], stdin) {
while(matrixone[i][inputs] != '\0'){
...
}
}