如何使用gets读入字符串数组?

时间:2016-02-27 20:45:53

标签: c arrays string matrix gets

我有一个包含15个字符串的数组(并不一定都必须使用),尽管在任何地方都读到gets永远不应该使用,但出于某种原因我认为对我来说最方便这个计划。 在提示用户指定他想要的行数和列数后,为了创建矩阵,我要求他输入矩阵值,一次每行一行。我使用gets执行此操作。同时,我想在字符串中扫描输入的空格量,以确保用户输入的数字量与指定的列数相对应。

最后我要打印出我输入的第二行。

您可以假设已经定义了rowonecolone,我只是没有复制该部分代码以节省空间。

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])

我在编译时收到警告,并且最终甚至没有机会输入矩阵,因为“太多/太少的输入”总是弹出。

非常感谢任何帮助,谢谢!

1 个答案:

答案 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'){
    ...
  }
}