如何在c中显示输入的字母?

时间:2014-03-13 06:25:59

标签: c for-loop

我是c programming的新手。我已经创建了一个输入字母的程序,最后显示输入的字母..但它只显示最后的字母..请帮助..我知道它的简单问题,但我是初学者所以请帮助人..

 #include<stdio.h>      
    int main()
    {
        char z;
        int a;
            printf("enter the no.");
            scanf("%d",&a);
            printf("the entered no. is:%d\n",a);
            int i;
            for(i=0;i<a;i++)
            {
                printf("enter the letters:");
                scanf("%s",&z);
            }
            printf("the entered letters are:");
            for(i=0;i<a;i++)
            {
                printf("%s\n",&z);
            }
            return 0;

    }

7 个答案:

答案 0 :(得分:2)

使用%c扫描字母。要扫描多个字母,您可以使用char数组:char z[10];

您尝试做的事情可以这样做:

        char z[10];   // Take some max size array
        ...
        for(i=0;i<a;i++)
        {
            printf("enter the letters:");
            scanf("%c",&z[i]);    // Scan the letters on each array position.
        }
        printf("the entered letters are:");
        for(i=0;i<a;i++)
        {
            printf("%c\n",z[i]);  //'printf' doesn't require address of arg as argument hence no `&` required
        }

%s参数用于扫描chars字符串。

请注意chars字符串chars数组之间的区别。 C中的chars字符串需要以0格式表示为\0的ASCII字符char终止,而char数组只是需要的字母集合不得以\0终止。

当您尝试对printfstrcpystrlen等字符串执行某些操作时,差异变得更加重要。这些函数适用于字符串的空字符终止属性。

例如:strlen计算字符串中的字符,直到找到\0,找出字符串的长度。同样,printf逐字符打印字符串,直到找到\0字符。

<强>更新

忘记提及scanf不是输入char格式的好选择。请改用fgetcstdin作为输入FILE流。

答案 1 :(得分:2)

问题:

  1. 您应该使用%c(用于字符)而不是%s(用于字符串)。

  2. 使用字符数组存储多个字符。阅读有关数组here的信息。

  3. 在第二个&循环中从printf()移除for

  4. 试试这个:

    int main()
    {
        char z[10];  //can hold 10 characters like z[0],z[1],z[2],..
        int a;
        printf("enter the no.");
        scanf("%d",&a);
        printf("the entered no. is:%d\n",a);
        int i;
        for(i=0;i<a;i++)
        {
            printf("enter the letters:");
            scanf("%c",&z[i]);
        }
        printf("the entered letters are:");
        for(i=0;i<a;i++)
        {
            printf("%c\n",z[i]);
        }
        return 0;
    }
    

答案 2 :(得分:2)

char z只是一个角色的占位符。而且你在z循环中编写了for的内容。要接收更多字符,请使用其他人提及的char array

或者在您正在扫描它们的同一个循环中打印字符:

#include<stdio.h>      
int main()
{
    char z;
    int a;
    printf("enter the no.");
    scanf("%d",&a);
    printf("the entered no. is:%d\n",a);
    int i;
    for(i=0;i<a;i++)
    {
         printf("enter the letters:");
         scanf("%s",&z);
         printf("letter scanned:%c\n", z);
    }
    return 0;
}

答案 3 :(得分:2)

有关scanf的详细信息,请查看this。您已经给出了scanf("%s",&z); %s用于读取字符串(除了换行符char以及以null char结尾的字符数组)。因此,如果你把它放在内部循环中,你就不会得到理想的结果。如果你想一次只读一个字符,请在这里用%c来表示字符。

for(i=0;i<a;i++)
{
            printf("enter the letters:");
            scanf("%c",z+i);
}

答案 4 :(得分:1)

#include <stdio.h>      

int main()
{
    char *z;
    int a;
    printf("enter the no.");
    scanf("%d",&a);
    z = (char *) malloc(a);
    printf("the entered no. is:%d\n",a);
    int i;
    for(i=0;i<a;i++)
    {
        printf("enter the letters:");
        scanf("%c",z+i);
    }
    printf("the entered letters are:");
    for(i=0;i<a;i++)
    {
        printf("%c\n",z);
    }
    return 0;
}

答案 5 :(得分:1)

代码中的第一个错误是您使用了&#34;%s&#34;而不是&#34;%c&#34;。第二是不可能在一个变量中存储多个值,而不是使用变量使用数组。第三个是你告诉用户输入他/她的字符数想要输入你不知道的。他们也可以输入1和100000也因此没有定义数组中的成员数。更好的是使用数组中特定数量的字符。

答案 6 :(得分:0)

最后我得到了答案谢谢你帮助stackoverflow的人简直摇滚......

#include<stdio.h>
#include<malloc.h>
int main()
{
        int a;
        char *z=(char *)malloc(sizeof(a));  
        printf("enter the no.");
        scanf("%d",&a);
        printf("the entered no. is:%d\n",a);
        int i;
        for(i=0;i<a;i++)
        {
            printf("enter the letters:");
            scanf("%s",&z[i]);
        }
        printf("the entered letters are:\n");
        for(i=0;i<a;i++)
        {                
            printf("%c\n",z[i]);
        }
        return 0;

}