我是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.h
或scanf("%80s", string)
...
谢谢!
答案 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()
字符串,我已经验证过的格式正确。