2014-06-28 69 views
0
#include<stdio.h> 
#include<string.h> 

int main() 
{ 
    int N; 
    int i; 

    scanf("%d",&N); 
    char A[100][100]; 

    for(i=0;i<N;i++) 
    gets(A[i]); 

    for(i=0;i<N;i++) 
    printf("%s\n",A[i]); 
} 

下面是一个简单的程序,进入一个没有字符串,然后打印极大,谁我用得到它读取一个字符串少功能被跳过一个字符串

+1

请缩进代码,使其可读 –

+0

一个字符串比少? – Soren

+3

即使在练习中,也不要使用'gets()'。 [这是一个可怕的安全漏洞](http://stackoverflow.com/questions/1694036)。 –

回答

0

您需要scanf函数调用后清理缓存因为有一个\n存储在它(因为你需要按回车键输入数字)。你可以这样做:

char clean; 
while (clean=getchar()!='\n' && clean !=EOF); 

这将继续读取标准输入缓冲区,直到它清除。

也避免使用获取,它可以导致缓冲区溢出,改用fgets并将流设置为stdin。

的代码将是:

int N; 
int i; 
int clean; 
scanf("%d", &N); 
while (clean=getchar()!='\n' && clean !=EOF); 
char A[100][100]; 
for (i = 0; i < N; i++) 
    fgets(A[i],100,stdin); 
for (i = 0; i < N; i++) 
    printf("%s\n", A[i]);