C语言:内部跳过输入字符串的扫描for循环

时间:2014-04-06 12:19:32

标签: c loops

每当执行代码时,for循环内的内容第一次不执行,即当i = 0时。但是循环在i = 0之后执行,即,对于i = 1,2,3,... n-1。任何人都可以解释这里的错误吗?

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
    char string[30][100];
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++){
       gets(string[i]);
       printf("%s\n",string[i]);
    }
    getch();
    return (EXIT_SUCCESS);
}

2 个答案:

答案 0 :(得分:0)

你可以尝试在scanf之后留一个空格,这样系统会在那里暂停而不是自动递增,原因是在你输入n值之后,没有系统暂停和循环中的一个i值是自动视为系统输入:

scanf("%d ", &n);

或使循环从0到等于n仍然会跳过一个数字,但同时加1只是为了让循环等于输入“n”你给

for(i=0;i<=n;i++)

请记住,第一个选项更明智,因为您可能还需要在程序的其他部分使用“n”。

答案 1 :(得分:-1)

for(i=0;i<n;i++)
{
   fflush(stdin);   //Clears the buffer.insert this here.
   gets(string[i]);
   printf("%s\n",string[i]);
}

执行scanf("%d",&n);后,您将离开'\n'(当您在末尾按Enter键时)缓冲区中的字符。在执行任何其他输入操作之前应该清除它。fflush(stdin)将清除键盘缓冲区。还有很多其他方法可以做到。但是对于初学者来说,使用fflush(stdin)很容易。