c - 如果在 c 中使用 scanf() 读取限制,为什么不能访问第一个字符串元素
问题描述
int main(){
char str[10][50],temp[50];
int lim,i,j;
printf("Enter lim: ");
scanf("%d",&lim);
for(i=0;i<lim;++i){
printf("Enter string[%d]: ",i+1);
gets(str[i]);
}
这里 str[0](Enter string[1]: ) 无法读取。读取从'输入字符串[2]:'(str [1])开始。
但是,如果不是 lim,而是将一个整数传递给循环,如下所示,程序将正确执行。这种情况可能是什么原因?
int main(){
char str[10][50],temp[50];
int lim,i,j;
for(i=0;i<5;++i){
printf("Enter string: ");
gets(str[i]);
}
解决方案
您scanf()
的 for 数字在输入流中留下了一个换行符,它将提供第一个gets()
.
看看这里寻求帮助:
http ://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
如何在 C 中读取/解析输入?常见问题解答
此外,您不想再使用gets()
了。
为什么gets函数如此危险以至于不应该使用它?
推荐阅读
- amazon-web-services - Cloudfront 的第二个来源给出错误的响应
- javascript - 使用 redux 和 asyncStorage 在 react-native 中进行身份验证和授权
- java - 我应该怎么办?event.ReminderApp.model.Event 中构造函数的参数 0 需要找不到类型为“java.util.UUID”的 bean
- python - 无法将背景图像添加到 Plotly Express 数据可视化
- python - 根据来自文件的输入,使用 TriggerDag 运算符触发连续的气流 wokflow
- barcode - 无法识别条码,有人识别这种类型的条码吗?
- sql - 如何在 sas 中传递 teradata sql 中的列表变量?
- python - 日期之间的任何差异都超过阈值
- python - Pandas:将具有多个范围的值转换为行
- termux - 如何在termux中杀死端口?