2012-07-06 26 views
0

我正在编写一个c项目,需要用户输入一个N * N的整数平方:也就是说N个整数的N行输入。算法工作正常。使用scanf()输入一个整数的正方形

现在我想让用户输入N个整数的N行,每个连续的整数都被一个空格分开。在这里,我没有scanf的正确用法,因为我试图声明整数数组,但我无法处理间距。

我想这样的事情,非常不自然和失败:

int i=0; 
int j=0; 

int N; 
scanf("%d",&N); 

char c[N][2*N-1]; 

while(i < N){ 
    scanf("%s",&c[i]); 
    i++; 
} 

i=0; 
j=0; 
while (i<N){ 
    while (j<N){ 
     c[i][j]=c[i][2*j]-48; 
     j++; 
    } 
    j=0; 
    i++; 
} 

有人能帮忙吗?

最佳, Newben

+0

好,感谢您的建议 ! – Newben 2012-07-06 20:49:25

+0

如果你需要一个“方块”,为什么你的数组被声明为“矩形”? '2 * N-1'作为第二维来自哪里? – AnT 2012-07-06 20:53:53

+0

风格很重要。今后,请尽量保持整洁。 – Wug 2012-07-06 21:02:26

回答

1

如果我明白你的原代码是应该做的那么这段代码应该真正做到这一点(和再打印出来只是为了证明它的工作)。您需要动态分配数组,因为它的大小是可变的(在C99中,您可以在栈上使用可变大小的数组,但这实际上是一个不同的讨论)。

scanf将自动忽略整数之间的空白(包括空格和换行符),因此您不需要手动解析该空格。

#include <stdlib.h> 
#include <stdio.h> 

int main() 
{ 
    int i=0, j=0, N; 
    int **c; 

    scanf("%d",&N); 

    c = malloc(N*sizeof(int*)); 

    for (i=0;i<N;i++) 
    { 
     c[i] = malloc(N*sizeof(int)); 
     for (j=0;j<N;j++) 
     { 
      scanf("%d",&c[i][j]); 
     } 
    } 

    for (i=0;i<N;i++) 
    { 
     for (j=0;j<N;j++) 
     { 
      printf("%d ",c[i][j]); 
     } 
     printf("\n"); 
     free(c[i]); 
    } 
    free(c); 
    return 0; 
} 

C99没有替代的malloc /免费的完整性(我心中已经从来不喜欢这个功能,C99,因为没有办法来检查是/是在栈上有足够的空间):

#include <stdlib.h> 
#include <stdio.h> 

int main() 
{ 
    int i=0, j=0, N; 

    scanf("%d",&N); 

    int c[N][N]; 

    for (i=0;i<N;i++) 
    { 
     for (j=0;j<N;j++) 
     { 
      scanf("%d",&c[i][j]); 
     } 
    } 

    for (i=0;i<N;i++) 
    { 
     for (j=0;j<N;j++) 
     { 
      printf("%d ",c[i][j]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 
+0

我无法真正判断,因为我的编译器不支持malloc和free ... – Newben 2012-07-06 21:09:48

+2

@Newben C编译器不支持'malloc()'和'free()'?你在做'#include stdlib.h''发生了什么事或者你怎么知道它不支持这两个函数? – Levon 2012-07-06 21:11:20

+0

是的,我做了,但我有错误号码 – Newben 2012-07-06 21:12:46