c - 即使没有来自用户的输入,字符串也有内容

标签 c

我试图“捕获”用户的键盘输入,这意味着代码会阻止他们输入某些字符,在这种情况下会阻止输入数字和特殊字符。

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

char buffer[30];
void in_text();

int main(void)
{
in_text();
printf ("\nThe string you entered is: %s", buffer);

    return 0;
}


void in_text(void)
{
char buffe[30]; 
char c1;
int x = 0, hit = 0;

printf("Enter string: ");


while (hit!=1)
{   
    c1 = getch();

    if (c1=='\b' && x!=0)
    {
        buffe[--x] = '\0';
        printf ("\b \b");
    }

    if (isalpha(c1) || isspace(c1) && c1!='\r') 
    {
        buffe[x++] = c1;
        buffe[x+1] = '\0';
        printf("%c", c1);
    }   

    if (c1=='\r' && strlen(buffe)==0)
    {
        buffe[x+1] = '\0';
    }   
    else if (c1=='\r' && strlen(buffe)>1)
    {
        printf ("%d", strlen(buffe));
        printf ("\n%s", buffe);
        hit = 1;
    }   
    else{
    }       
}

strcpy(buffer, buffe);

return 1;
}

此代码试图模仿人们可以看到的 scanf 输入样式,然后按退格键删除先前输入的字符。我想“捕获”回车键,这样当用户按下“Enter”时,程序会检查当前字符串 (buffe) 是否包含至少一个有效字符,并且当程序检查输入并发现用户按下时Enter 键和字符串不包含任何内容,循环继续。

我的代码的问题是,当我按下 Enter 键时,程序启动后,strlen 函数立即返回一个大于 0 的值,我认为这是不正常的,因为没有输入除了用户按下的“Enter”键之外。

对此有什么想法吗?

最佳答案

可以试试

char buffe[30] = {0};

(我还没试过)

关于c - 即使没有来自用户的输入,字符串也有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22394063/

相关文章:

当提供从网络接收到的字符串时,Curses printw() 将仅打印换行符

c - pthread执行时间?如何计算?

c - 在 C 中,如何确保初始化字符串的长度小于指定的长度

c - 为什么原始套接字改变了我的 TCP 校验和

c - 在 Debug模式下获得警告但在 Release模式下没有(我会得到未定义的行为吗?)

Conio.h 无法在代码块中工作(对 .. 的 undefined reference )

使用 switch 语句将数字(最多 4 位)转换为单词(C 程序)

c - 实现用户级线程库启动一个新线程[作业]

c - 在 Opencv 中滚动图像时出错

c - 使用 C 从用户输入中获取文本