在C中输入字符串时出现问题

时间:2015-07-10 17:48:44

标签: c string input scanf fgets

我正在尝试编写一个C程序,它将n作为整数输入,然后输入n个字符串。当我运行程序时,它需要一个小于n的输入。如果我输入1作为第一个输入,程序就会终止。这是代码:

int n;
scanf("%d", &n);
char str[101];

while (n--) {
    fgets(str, 101, stdin);
    // other stuff...
}

我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

如果您使用scanf()作为字符串输入,您的程序将会正常工作。

#include <stdio.h>

int main()
{
    int n;
    char str[101];
    scanf("%d", &n);
    while (n--)
    {
        scanf("%s", str);
    }
    return 0;
}

但是对于所有输入使用fgets()可能更好。

#include <stdio.h>

int main()
{
    int n;
    char str[101];
    fgets(str, 100, stdin);
    sscanf(str, "%d", &n);
    while (n--)
    {
        fgets(str, 100, stdin);
    }
    return 0;
}

因为您首先使用fgets(),所以我几乎不需要提醒您,您应该知道它会在输入字符串的末尾保留newline

答案 1 :(得分:1)

请记住,按Enter键也会向流发送一个字符。您的程序无法解释此问题。使用格式scanf(%d%*c)丢弃第二个字符。

int main(void) {

    int n;

    scanf("%d%*c", &n);

    char str[101];

    while (n--)
    {
        fgets(str, 101, stdin);

        // other stuff.....
    }

}

答案 2 :(得分:1)

int n;
scanf("%d", &n);
char str[101];

while (n--) 
{
fgets(str, 101, stdin);
// other stuff...
}

当您输入n并从键盘ENTER'\n时,stdin存储在fgets中,因此newline character遇到scanf如果返回

因此请在 char c ; while((c=getchar())!=NULL && c!='\n'); -

之后使用此功能
enum