C fgets。我在一个dowhile中使用它,但第一次使用它就像它不存在

时间:2013-04-02 17:33:27

标签: c fgets

我在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);

2 个答案:

答案 0 :(得分:2)

这是混合面向字段的输入(scanf()使用的)和面向行的输入的相当常见的陷阱。面向字段的输入并不关心换行,当你使用类似

的东西时
scanf("%d", &num);

然后输入“42 \ n”,“\ n”实际上遗留在stdin上。您在后续的scanf()调用中没有注意到它,因为(除了少数例外)scanf()将忽略前导空格。

fgets()来电后致电scanf()时,'\n'还剩stdinfgets()很乐意接受此“空行” “ 为了你。在scanf()完成后编写代码以忽略行的其余部分很容易:

int ch;
/* call to scanf() */
while ((ch = getchar()) != '\n' && ch != EOF) { /* do nothing */ }

执行此操作后,将不会有任何剩余的换行符。

答案 1 :(得分:0)

问题可能与'\ n'字符有关。还有另一个主题可以帮助here