2015-01-04 231 views
-1

我尝试在char ch[20]中输入一个字符串,我想当我按下空格键时,它会停下来将输入输入到变量中。但只要我不按回车键,gets()函数就会输入。只要我不按空格字符,我怎样才能接受输入?gets()和getc()之间有什么区别?

+4

欢迎SO。您的问题标题与您提问的问题不同。另外请尽量给你的问题的文字表达更加关心,有编辑按钮来帮助你更好地格式化的东西。 – 2015-01-04 10:28:25

+6

另外,你不应该使用'gets',它已经从C标准中删除,因为它本质上是不安全的。改为使用'fgets'。 – 2015-01-04 10:31:17

回答

1

gets()不再是一个标准,它可能会导致缓冲区溢出,所以您应该使用fgets()以便读取直到行尾。为了通过字符读取char,直到遇到空间,可以使用getc(),如下所示。

检查下面的代码:

#include <stdio.h> 

int main(void) { 
    int i=0; 
    char ch; 
    char a[20]; 
    while(((ch = getc(stdin)) != ' ') && i<19) 
    a[i++] = ch; 
    a[i] = '\0'; 
    printf("%s\n",a); 
    return 0; 
} 
+0

我得到了我的答案:) – Mastan 2015-01-04 13:11:06

+0

当执行达到'a [i] ='\ 0';'时,'i'可以是20,从而导致未定义的行为 – 2015-01-04 13:29:37

相关问题