#include<stdio.h>
int main()
{
int N,i,j,n,*numArray,count=0;
char **arr,*part1,*part2,*token;
scanf("%d",&N);
arr=(char **)malloc(N*sizeof(char *));
numArray=(int *)malloc(N*sizeof(int));
for(i=0;i<N;i++){
arr[i]=(char *)malloc(50*sizeof(char));
}
for(i=0;i<N;i++){
printf("plz enter %d th :",i);
gets(&arr[i][0]);// why is it not executing
}
for(i=0;i<N;i++){
printf("%s",arr[i]);
}
return 0;
}
我尝试执行此代码并发现该行得到(&amp; arr [i] [0]);没有执行,即它不等待用户输入。相反,它打印“plz输入0 th:plz输入1 th:plz输入2 th:依此类推”并且不等待用户输入字符串。 我无法得到究竟是什么问题以及到底发生了什么?请帮助。提前谢谢。
答案 0 :(得分:3)
此行输入条目数
scanf("%d",&N);
在输入缓冲区中留下newline
。然后这一行
gets(&arr[i][0]);
将单独的newline
作为第一个条目。
你可以像这样摆脱它
scanf("%d%*c",&N);
但是你不应该在这个时代使用gets
,它已经过时了。这对于字符串条目(而不是上面的mod)来说会更好
scanf("%50s", arr[i]);
以及检查所有scanf
次调用的返回值。但是代码仍然需要改进,因为如上所述,scanf
只能扫描到第一个空格。
答案 1 :(得分:2)
。它不等待用户输入。相反,它打印“plz输入0 th:plz输入第1个:plz输入第2个:依此类推“
这是由于循环中出现空格的问题...而是在每次使用scanf(" ");
扫描字符串之前尝试使用它们,如下所示:
for(i=0;i<N;i++){
printf("plz enter %d th :",i);
scanf(" "); //to consume white spaces
gets(arr[i]);// why is it not executing? because of wrong arguments
}
编辑:根据@ user3629249的建议
从不使用
gets()
有两个主要原因:
- 它允许输入溢出输入缓冲区
- 从C11开始,它将从语言中删除。
醇>
更好的选择是fgets()
这是一个更了解它的链接:here