微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将字符串输入到字符串数组中

如何解决将字符串输入到字符串数组中

我有这个代码

#include<stdio.h>
int main(){
    char arr[10][80];
    int n;
    scanf_s("%d",&n);
    for(int i=0;i<n;i++){
        fgets(arr[i],80,stdin);
    }
    for(int i=0;i<n;i++)
        printf("%s",arr[i]);
}

在大多数情况下,它运行良好,除了一件事: 它只读取 n-1 字符串。所以对于n=3,它只会让我在打印它们之前输入2个字符串并且程序结束。这是为什么?

解决方法

正如大家所注意到的,scanf_s("%d",&n); 在输入流中留下换行符,因此第一个 fgets 读取它并将其存储在 arr[0] 中。

现在的解决方案不是疯狂地对未定义的内存位置进行一些额外的读取,而是查看 scanf_s 的格式说明符。特别是:

格式参数指定输入的解释,可以包含以下一项或多项:

  • 空白字符:空白 (' ');标签 ('\t');或换行符 ('\n')。空白字符导致 scanf 读取但不存储输入中的所有连续空白字符,直到下一个非空白字符。格式中的一个空白字符匹配输入中的任意数字(包括 0)和空白字符组合。
  • ...

因此需要将格式说明符调整为 scanf_s("%d ",&n);,其中只添加一个空格,它告诉 scanf 读取并包括换行符。 QED。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?