我在C编程中遇到了关于fgets的问题。
我在我的代码中使用fgets()函数(输入的例子:A4 N)在do-while中。 (这样输入就是正确的)但是出于某种原因第一次它就像fgets()不存在一样。
为了帮助您了解我,这是运行后出现的内容。我也尝试使用scanf()但失败了..
Example of positioning: G3 E
Aircraft carrier (5 places), Give location and direction:
1
Aircraft carrier (5 places), Give location and direction:
我的代码是:
void arrayFill(char **array, int r, int c, int player)
{
char position[10];
printf("\n%s", "Example of positioning: G3 E");
do
{
printf("\n%s", "Aircraft carrier (5 places), Give location and direction: ");
fgets(position, 10, stdin);
printf("\n%s", "1");
}while(validPosition(array, r, c, position, 5) == 2);
答案 0 :(得分:2)
这是混合面向字段的输入(scanf()
使用的)和面向行的输入的相当常见的陷阱。面向字段的输入并不关心换行,当你使用类似
scanf("%d", &num);
然后输入“42 \ n”,“\ n”实际上遗留在stdin
上。您在后续的scanf()
调用中没有注意到它,因为(除了少数例外)scanf()
将忽略前导空格。
在fgets()
来电后致电scanf()
时,'\n'
还剩stdin
,fgets()
很乐意接受此“空行” “ 为了你。在scanf()
完成后编写代码以忽略行的其余部分很容易:
int ch;
/* call to scanf() */
while ((ch = getchar()) != '\n' && ch != EOF) { /* do nothing */ }
执行此操作后,将不会有任何剩余的换行符。
答案 1 :(得分:0)
问题可能与'\ n'字符有关。还有另一个主题可以帮助here。