如何解决将字符串输入到字符串数组中
#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 举报,一经查实,本站将立刻删除。