怎么实现用getch接收输入,并以字符串输出

时间:2023-01-07 19:01:45
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main(int argc, char** argv)
{
char i=0;
int j=0;
char chNameInput[17];
memset(chNameInput,0,17);
char chPassWordInput[7];
memset(chPassWordInput,0,7);
while ((i=getche())!='\n')
{
chNameInput[j]=i;
j++;
}
printf("%s\r\n",chNameInput);
  return 0;
}
这是我的程序,为什么不能输出结果?

9 个解决方案

#1


#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
int main(int argc, char** argv) 

char i=0; 
int j=0; 
char chNameInput[17]; 
memset(chNameInput,0,17); 
char chPassWordInput[7]; 
memset(chPassWordInput,0,7); 
while ((i=getche())!='\r') 

chNameInput[j]=i; 
j++; 

chNameInput[j] = 0;
printf("\n%s\n",chNameInput); 
return 0; 

#2


不带回显的应该改getche为getch

在while结束后最好fflush(stdin);一下.

#3


#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
int main(int argc, char** argv) 

char i=0; 
int j=0; 
char chNameInput[17]; 
memset(chNameInput,0,17); 
char chPassWordInput[7]; 
memset(chPassWordInput,0,7); 
while ((i=getche())!='\r' && j<17) 

chNameInput[j]=i; 
j++; 

chNameInput[j] = 0;
printf("\n%s\n",chNameInput); 
return 0; 

#4


引用 3 楼 hqin6 的回复:
C/C++ code#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
int main(int argc, char** argv) 

    char i=0; 
    int j=0; 
    char chNameInput[17]; 
    memset(chNameInput,0,17); 
    char chPassWordInput[7]; 
    memset(chPassWordInput,0,7); 
    while ((i=getche())!='\r' && j<17) 
    { 
        chNameInput[j]=i; 
        j++; 
    } 
    chNameInput[j] = 0;
    …


嘿嘿j==17的时候,while中止
然后chNameInput[17] = 0;
就囧了.

#5


引用 2 楼 baihacker 的回复:
不带回显的应该改getche为getch 

在while结束后最好fflush(stdin);一下.


while ((i=getche())!='\r') 

用getche点回车后输出不了,用getch输入时不显示 回车却能输出 什么原因?

#6


引用 5 楼 yuhudie203 的回复:
引用 2 楼 baihacker 的回复:
不带回显的应该改getche为getch 

在while结束后最好fflush(stdin);一下. 
 

while ((i=getche())!='\r') 

用getche点回车后输出不了,用getch输入时不显示 回车却能输出 什么原因?

getche回车输出了,只是覆盖了上1行的输出.

#7


LZ遇到的问题是因为getche直接从终端读输入,而不是从输入缓冲,这时的换行还没转换为‘'\r',‘\n'

#8


引用 1 楼 baihacker 的回复:
C/C++ code#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
int main(int argc, char** argv) 

char i=0; 
int j=0; 
char chNameInput[17]; 
memset(chNameInput,0,17); 
char chPassWordInput[7]; 
memset(chPassWordInput,0,7); 
while ((i=getche())!='\r') 

chNameInput[j]=i; 
j++; 

//chNameInput[j] = 0;
printf("\n%s\n",chNameInput); 
return 0; 



这样一改的话会有什么bug吗?我单步运行没看出有什么异同,是不是j+1了再初始一下!能给我讲解一下吗?多谢了

#9


引用 8 楼 mtc1256 的回复:
引用 1 楼 baihacker 的回复:
C/C++ code#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
int main(int argc, char** argv) 

char i=0; 
int j=0; 
char chNameInput[17]; 
memset(chNameInput,0,17); 
char chPassWordInput[7]; 
memset(chPassWordInput,0,7); 
while ((i=getche())!='\r') 

chNameInput[j]=i; 
j++; 

//chNameInput[j] = 0; 
printf("\n%s\n",chNameInput); 
retu…

字符串以'\0'结尾.你可以用3L代码,只不过当输入17个字符时会少放个字符进来

#1


#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
int main(int argc, char** argv) 

char i=0; 
int j=0; 
char chNameInput[17]; 
memset(chNameInput,0,17); 
char chPassWordInput[7]; 
memset(chPassWordInput,0,7); 
while ((i=getche())!='\r') 

chNameInput[j]=i; 
j++; 

chNameInput[j] = 0;
printf("\n%s\n",chNameInput); 
return 0; 

#2


不带回显的应该改getche为getch

在while结束后最好fflush(stdin);一下.

#3


#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
int main(int argc, char** argv) 

char i=0; 
int j=0; 
char chNameInput[17]; 
memset(chNameInput,0,17); 
char chPassWordInput[7]; 
memset(chPassWordInput,0,7); 
while ((i=getche())!='\r' && j<17) 

chNameInput[j]=i; 
j++; 

chNameInput[j] = 0;
printf("\n%s\n",chNameInput); 
return 0; 

#4


引用 3 楼 hqin6 的回复:
C/C++ code#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
int main(int argc, char** argv) 

    char i=0; 
    int j=0; 
    char chNameInput[17]; 
    memset(chNameInput,0,17); 
    char chPassWordInput[7]; 
    memset(chPassWordInput,0,7); 
    while ((i=getche())!='\r' && j<17) 
    { 
        chNameInput[j]=i; 
        j++; 
    } 
    chNameInput[j] = 0;
    …


嘿嘿j==17的时候,while中止
然后chNameInput[17] = 0;
就囧了.

#5


引用 2 楼 baihacker 的回复:
不带回显的应该改getche为getch 

在while结束后最好fflush(stdin);一下.


while ((i=getche())!='\r') 

用getche点回车后输出不了,用getch输入时不显示 回车却能输出 什么原因?

#6


引用 5 楼 yuhudie203 的回复:
引用 2 楼 baihacker 的回复:
不带回显的应该改getche为getch 

在while结束后最好fflush(stdin);一下. 
 

while ((i=getche())!='\r') 

用getche点回车后输出不了,用getch输入时不显示 回车却能输出 什么原因?

getche回车输出了,只是覆盖了上1行的输出.

#7


LZ遇到的问题是因为getche直接从终端读输入,而不是从输入缓冲,这时的换行还没转换为‘'\r',‘\n'

#8


引用 1 楼 baihacker 的回复:
C/C++ code#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
int main(int argc, char** argv) 

char i=0; 
int j=0; 
char chNameInput[17]; 
memset(chNameInput,0,17); 
char chPassWordInput[7]; 
memset(chPassWordInput,0,7); 
while ((i=getche())!='\r') 

chNameInput[j]=i; 
j++; 

//chNameInput[j] = 0;
printf("\n%s\n",chNameInput); 
return 0; 



这样一改的话会有什么bug吗?我单步运行没看出有什么异同,是不是j+1了再初始一下!能给我讲解一下吗?多谢了

#9


引用 8 楼 mtc1256 的回复:
引用 1 楼 baihacker 的回复:
C/C++ code#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
int main(int argc, char** argv) 

char i=0; 
int j=0; 
char chNameInput[17]; 
memset(chNameInput,0,17); 
char chPassWordInput[7]; 
memset(chPassWordInput,0,7); 
while ((i=getche())!='\r') 

chNameInput[j]=i; 
j++; 

//chNameInput[j] = 0; 
printf("\n%s\n",chNameInput); 
retu…

字符串以'\0'结尾.你可以用3L代码,只不过当输入17个字符时会少放个字符进来