首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用gets读入字符串数组?

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

Stack Overflow用户
提问于 2016-02-28 04:45:53
回答 1查看 625关注 0票数 0

我有一个由15个字符串组成的数组(不一定要使用它们),尽管到处都读到gets不应该被使用,但出于某种原因,我相信它对我来说是这个程序最方便的。在提示用户指定要创建矩阵的行数和列数后,我要求用户输入矩阵值,每次一行。我使用gets来做这件事。同时,我希望扫描字符串中输入的空格数量,以确保用户输入的数字与指定的列数相对应。

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

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

代码语言:javascript
复制
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])

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

任何帮助都将不胜感激,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-02-28 05:01:39

无限循环。

或者更确切地说,最终matrixone[i][inputs]访问的内容远远超出了它所读取的内容,甚至可能超出了数组本身。这会导致未定义的行为(UB)。

gets()消耗,但不保存'\n'

代码语言:javascript
复制
gets(matrixone[i]);
while(matrixone[i][inputs]!='\n'){  // why should this quit?
  ...
  inputs++;
}

相反,删除gets()已有5年之久,请使用fgets(),检查返回值并查找字符串的末尾

代码语言:javascript
复制
if (fgets(matrixone[i], sizeof matrixone[i], stdin) {
  while(matrixone[i][inputs] != '\0'){
    ...
  }
}

对OP的建议(猜测OP的目标)

代码语言:javascript
复制
char *matrixone[15] = { 0 };
printf("input your matrix\n");

for (i=0;i<min(rowone,15);i++){
  buf[1000];
  if (fgets( buf, sizeof buf, stdin) == NULL) break;
  buf[strcspn(buf, "\n")] = 0;

  // qualify buf concerning ' ' , sbar, etc
  ...

  matrixone[i] = strdup(buf);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35675239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档