如何使用getchar按字母顺序排列列表
我目前正在尝试按字母顺序排列列表。我试图让用户输入一行,其中包含要排序的单词数。下面的每一行都将输入一个新词。单词将不包含空格,并以换行符结尾。我知道最简单的方法是使用如何使用getchar按字母顺序排列列表,c,getchar,C,Getchar,我目前正在尝试按字母顺序排列列表。我试图让用户输入一行,其中包含要排序的单词数。下面的每一行都将输入一个新词。单词将不包含空格,并以换行符结尾。我知道最简单的方法是使用scanf或fgets读取所有内容,但是我的微处理器无法处理这些函数,迫使我使用getchar()。现在,当它打印出排序后的列表时,它只打印垃圾。我觉得我的代码有问题,但我对编程非常陌生,无法理解。感谢您的帮助 #include <stdio.h> #include <string.h> int
scanf
或fgets
读取所有内容,但是我的微处理器无法处理这些函数,迫使我使用getchar()
。现在,当它打印出排序后的列表时,它只打印垃圾。我觉得我的代码有问题,但我对编程非常陌生,无法理解。感谢您的帮助
#include <stdio.h>
#include <string.h>
int main()
{
int i, j;
char string[10][20], temp[20];
int num;
while(1)
{
char ch = getchar();
if(ch == 0)
continue;
if(ch <= 0x39 && ch >= 0x30)
{
putchar(ch);
num = ch - 0x30;
}
if(ch == 0x0D)
printf("\n\r");
if (ch <= 0x7A && ch >= 0x61)
{
putchar(ch);
for(i=0; i<=num; i++)
{
for(j=0; j<=20; j++)
string[i][j] = ch;
}
}
if(ch== 0x20)
break;
}
for (i = 0; i < num - 1 ; i++)
{
for (j = i + 1; j < num; j++)
{
if (strcmp(string[i], string[j]) > 0)
{
strcpy(temp, string[i]);
strcpy(string[i], string[j]);
strcpy(string[j], temp);
}
}
}
printf("\nSorted Names\n");
for (i = 0; i < num; i++)
{
printf("%s\n", string[i]);
}
return 0;
}
#包括
#包括
int main()
{
int i,j;
字符串[10][20],临时[20];
int-num;
而(1)
{
char ch=getchar();
如果(ch==0)
继续;
如果(ch=0x30)
{
putchar(ch);
num=ch-0x30;
}
如果(ch==0x0D)
printf(“\n\r”);
如果(ch=0x61)
{
putchar(ch);
对于(i=0;i首先,您需要使用NULL终止您在中读取的字符串。因此,您应该将返回的检查更改为:
if ( ch == 0x0D )
{
string[i][j] = '\0';
printf( "\n\r" );
}
第二,你一次读一个字符,但是你对每个字符都做了一个for循环。这是完全错误的。你需要在while循环中跟踪i和j,并把每个字符放在正确的位置。我不会给你写出来,因为这很简单:当一个字符介于接收n'a'和'z',只需设置字符串[i][j]=ch,然后增加j。只需先检查以确保j小于20即可
然后,每次看到0x0D字符时只需增加i,并将while循环更改为在i>=num时退出
另外,我会在读取单词之前将您对num的读取放在一个单独的循环中,这样您就可以检查用户是否按正确的顺序输入数据。在用户输入一个数字以便您知道要读取多少之前,您不想开始读取单词。jn小到没有C运行时,只是小到他们没有在里面放任何东西?太奇怪了。这到底是什么微处理器?我如何用null终止字符串?我如何修复第一个“for”循环,使其成为要排序的字数?我正在使用microblaze。我正在为nexys 3Curious使用microblaze,为什么要用if(ch=0x30)
whenif(ch='0')编写代码
看起来更容易理解?谢谢你,这非常有帮助,而且让人明白。我非常感激。你不会用NULL
终止字符串,而是用0
或“\0
NULL
用于指针。我在想之前的答案,我只是查看我刚才谈论的指向字符串的指针的位置,我只是输入错误。@rampion仅在谈论指针时才输入。NULL可以定义为((void*)0),当与非指针一起使用时无效。另请参见@rampion:0
和(void*)0
可以用作空指针常量,但如果将null
定义为(void*)0
,则string[i][j]=null
不会带来幸福。