fgets()/ scanf()do-while循环

时间:2014-03-20 16:02:30

标签: c scanf fgets

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{

    char strA[10];

    int i, j;


    do {

        j = 0;

        memset(&strA,'\0', sizeof(strA));

        printf("Please enter your password: ");
        fgets (strA,10,stdin);

        printf("\n%s\n\n",strA);

        if (strlen(strA) > 8) {
            printf("That password is too long\n");
        }
        else {
            j++;
        }

    } while (j<1);
return 0;
}

您好。我在一个dowhile循环中运行fgets()。我首先测试输入的字符串是否太长,然后如果字符串太长则提示再次输入字符串(通过让dowhile重新开始)。问题是从一个太长的字符串(从fgets()被剪切的额外字符被设置为10)的结转在dowhile循环的第二次,第三次等等的迭代中被输入,直到最终字符串的其余部分满足else语句,并且dowhile终止。我需要将dowhile循环的每次迭代作为手动输入字符串的新起点。有人可以帮忙吗?

取代:

fgets (strA,10,stdin);

使用:

scanf("%10s", strA);

同样的问题。

1 个答案:

答案 0 :(得分:3)

试试这个

fgets (strA,10,stdin);
int c;                      // Notice that I declared c as int (getchar() returns int)
while((c = getchar()) != '\n' && c != EOF) // This will consume all the previous characters left in the buffer
    ;