使用循环中的scanf动态读取C中的字符

时间:2018-04-05 20:04:32

标签: c scanf

我是C的新手,我试图动态读取字符。我想将它们保存到一个数组中,以便以后能够使用它。我现在得到的是这个,我不明白为什么它不起作用。我的问题是我必须按两次输入,它只会保存一个字符。

char temp;
char tempOld;
int i = 0;
char string[80];

while(scanf("%c", &temp) == 1 && tempOld != '\n')
{
    string[i] = temp;
    tempOld = temp;
    i++;
}

string[i] = '\0';

我的练习要点是不要使用string.hscanf("%80s", string) ...

谢谢!

2 个答案:

答案 0 :(得分:2)

您的循环条件while(scanf("%c", &temp) == 1 && tempOld != '\n')首先读取一个字符,然后检查前一个字符是否为换行符。此外,值tempOld未初始化,因此第一次循环迭代的行为实际上是未定义的。

您需要检查当前字符读取是否为换行符,如果是,则终止循环。类似的东西:

int temp;
while (i < 79 && (temp = getc(stdin)) != EOF && temp != '\n')
{
    string[i++] = temp;
}
string[i] = '\0';

答案 1 :(得分:1)

不要调用scanf来读取键盘输入。此代码建议

while(EOF != (temp = getc(stdin)) && tmpOld != '\n')

此外,将tmpOld初始化为某些内容,或者编译器可能会愉快地删除整个循环。

无论如何,我发现scanf()背后有足够的痛苦,我停止使用它,并且只使用sscanf()字符串,我已经验证过的格式正确。