C中字符数组输入和输出的问题

时间:2011-04-05 18:26:06

标签: c

我编写了以下代码来读取字符数组并打印出来。

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void read_array(char a[],int n);
void print_array(char a[],int n);
int main(void)
{
    char a[100];
    int n;
    printf("\nEnter n:");
    scanf("%d",&n);
    printf("\nEnter the characters:");
    read_array(a,n);
    printf("\nThe array now is: ");
    print_array(a,n);
    getch();
    return 0;
}

void read_array(char a[],int n)
{
     int i;
     for(i=0;i<n;i++)
         scanf("%c",&a[i]);

}
void print_array(char a[],int n)
{
     int i;
     for(i=0;i<n;i++)                
        printf("a[%d]=%c\n",i,a[i]);
}

输入:

Enter n:15  
Enter the characters:xxxxx     xxxxx  

输出:

The array now is:  
a[0]=    
a[1]=x    
a[2]=x    
a[3]=x    
a[4]=x    
a[5]=x    
a[6]=    
a[7]=    
a[8]=    
a[10]=    
a[11]=x    
a[12]=x   
a[13]=x    
a[14]=x    

我的输入a[5]a[9]中的字符是空白字符。那么如何输出a[0]=(a blank)

3 个答案:

答案 0 :(得分:2)

您正在阅读的第一个字符是您输入15时输入的换行符。使用fgets()sscanf() - 您会更开心。

答案 1 :(得分:1)

在scanf函数中获取字符值使用getche或getchar函数。这将允许您捕获包括新行在内的所有字符。你可以跳过第一个字符并复制其余字符。

答案 2 :(得分:0)

在使用scanf进行char数组输入的情况下,它还会捕获您在新行中输入输入时按下的Enter键,因此会发生此问题。

You may use getchar if you want each character to be present as input.