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

标签 c scanf

<分区>

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

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)...

谢谢!

最佳答案

您的循环条件 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';

关于c - 在循环中使用 scanf 动态读取 C 中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49680654/

相关文章:

c - scanf 之后 fgets 不起作用

c - 给定一个 %hhu 和一个输入 1025,哪一部分映射到一个无符号字符?

c - 字符串未正确标记

C 错误 : expected expression before â. token

c - 输入错误后如何刷新缓冲区

c - 尽管 0 长度缓冲区和编译器警告,scanf() 仍然可以工作。到底是怎么回事?

C: scanf 和程序退出

c - 在不知道整数的实际个数的情况下扫描多个整数

c - 为什么堆上的内存分配比堆栈上的内存分配慢得多?

c - malloc 对象上的 Free throws 错误