我正在创建一个程序,我插入一些句子,程序按顺序输出。我已经完成了程序,但是当我运行它时,似乎我输入到数组中的字符没有正确显示或存储,因此得到随机字母而不是完整的句子。这是该程序的代码:
char ch;
int i,j,k;
int nothing = 0;
int count = 1;
char lines[5][256];
int length[256];
int main() {
printf("Please insert up to a max of 5 lines of text (Press enter to go to next line and twice enter to stop the program):\n");
i = 0;
while (i<5){
j = 0;
ch = getche();
if (ch == '\r'){
if(i!= 0){
break;
}
printf("You have not inserted anything, please insert a line:");
i=-1;
}
if(ch != '\r'){
lines[i][j]=ch;
while (ch!='\r'){
ch = getche();
lines[i][j] = ch;
j++;
}
}
printf("\n");
i++;
}
for (k=i ; k > 0; k--){
printf("\tphrase %i :", count);
for ( j =0 ; j <= length[k]; j++){
printf("%c",lines[j][k]);
}
count++;
printf("\n");
}
return 0;
}
如何正确存储和显示字符?感谢任何帮助,谢谢!!
答案 0 :(得分:3)
您的代码存在许多问题。我将在这里尝试总结,并为您提供改进的代码。
Fist,我为了在我的系统上编译而进行了一些更改:
getche()
更改为getchar()
(getche()
似乎无法在Ubuntu上使用。)\r
的支票更改为\n
。length
数组更改为5,因为您只有最多5个字符串(不是256个)的长度。代码中的一些问题:
length[]
循环中的while
数组,因此程序永远不知道要打印多少个字符。for
参数更改为从0开始,并且最多可以k < i
,因为您在上一个循环中的最后一个字符后更新了i
。与j
相同。lines[j][k]
更改为lines[k][j]
。count
变量 - 只需使用k
即可。已移除count
。nothing
变量未被使用 - 删除它。#include <stdlib.h>
#include <stdio.h>
char ch;
int i,j,k;
char lines[5][256];
int length[5];
int main()
{
printf("Please insert up to a max of 5 lines of text (Press enter to go to the next line and twice enter to stop the program):\n");
i = 0;
while (i<5)
{
j = 0;
ch = getchar();
if ((ch == '\n') && (j == 0) && (i > 0))
{
break;
}
if (ch != '\n')
{
while (ch != '\n')
{
lines[i][j] = ch;
j++;
ch = getchar();
}
}
length[i] = j;
printf("\n");
i++;
}
for (k = 0; k < i; k++)
{
printf("\tPhrase %i : ", k);
for (j = 0; j < length[k]; j++)
{
printf("%c", lines[k][j]);
}
printf("\n");
}
return 0;
}