如何使用%c在字符数组中获取输入字符并使用%s产生正确的输出?

问题描述

这是我的代码

#include<stdio.h>
#include<string.h>
int main()
{
        int n,i;
        char ch[100];
        scanf("%d",&n);
        for(i = 0; i < n; i++){
                scanf(" %c",&ch[i]);
        }
        printf("%s\n",strupr(ch));
        return 0;
}

首先,我想在n变量中使用字符数组的大小。之后,我要使用n个字符并分配数组。来自该程序的输出是正确的,但它也会产生一些垃圾值。

例如:

5
s d g h f
Output: SDGHFC└U▄■` 

如何忽略输出中的垃圾值?

解决方法

在读取字符时,您在输入中提供的空格也将被视为字符,并且strupr(c)会产生一些毛毛的输出,此外,您还必须在字符数组的末尾手动提供空字符。下面的程序可能会帮助您找到答案

#include<stdio.h>
#include<string.h>
int main()
{
        int n,i;
        scanf("%d",&n);
        fflush(stdin);
        char ch[100];
        for(i = 0; i < n; i++){
                char temp;
                scanf("%c",&temp);
                if(temp != '\n')
                    ch[i] = temp;
                else
                    break;
        }
        ch[n] = '\0';
        printf("%s\n",strupr(ch));
        return 0;
}

您的输入应类似于

5
sdghf

使用空格输入。程序将如下所示。

#include<stdio.h>
#include<string.h>
int main()
{
        int n,&n);
        fflush(stdin);
        char ch[100];
        char temp;
        i = 0;
        while(scanf("%c",&temp)){
                if(temp == ' ')
                    continue;
                if(temp != '\n')
                    ch[i++] = temp;
                else
                    break;
        }
        ch[i] = '\0';
        printf("%s\n",strupr(ch));
        return 0;
}

现在,您可以根据需要安排角色。

,

只需将数组ch []初始化为全零。 I.E。

  for (i = 0; i < 100; i += 1) { ch[i] = '\0'; }
 

在声明ch []之后放置此行。