Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用getchar按字母顺序排列列表_C_Getchar - Fatal编程技术网

如何使用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)
when
if(ch='0')编写代码
看起来更容易理解?谢谢你,这非常有帮助,而且让人明白。我非常感激。你不会用
NULL
终止字符串,而是用
0
“\0
NULL
用于指针。我在想之前的答案,我只是查看我刚才谈论的指向字符串的指针的位置,我只是输入错误。@rampion仅在谈论指针时才输入。NULL可以定义为((void*)0),当与非指针一起使用时无效。另请参见@rampion:
0
(void*)0
可以用作空指针常量,但如果将
null
定义为
(void*)0
,则
string[i][j]=null
不会带来幸福。