C 表从第1行开始,而不是从第0行开始

C 表从第1行开始,而不是从第0行开始,c,C,函数搜索表中最长/最短的字符串。我可以编码和读取它,但只要我输入函数void minmax(char*ptab,char**pva,int n)它就会跳到第1行而不是第0行。因此,第一行[0]永远不会被读取 #include <stdio.h> #include <stdlib.h> #include <string.h> int encodage(char [][50]); void affichage(char [][50],int); void min

函数搜索表中最长/最短的字符串。我可以编码和读取它,但只要我输入函数
void minmax(char*ptab,char**pva,int n)
它就会跳到第1行而不是第0行。因此,第一行[0]永远不会被读取

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

int encodage(char [][50]);
void affichage(char [][50],int);
void minmax (char *,char **,int);

int main()
{   
    char tab[50][50];
    char *va[2];
    int n;
    n=encodage(tab);
    affichage(tab,n);
    minmax(&tab[0][50],va,n-1);
    printf("\nTest\n");
    puts(*va);
    fflush(stdin);
    puts(*(va+1));
    return 0;
}

//Code and Read the table with the encodage and affichage.

void minmax(char *ptab,char **pva,int n)
{
    int i;
    *pva=ptab;
    *(pva+1)=ptab;
    ptab=ptab+50;
    for(i=1;i<n-1;i++)
    {
        if(strlen(ptab)>strlen(*(pva+1)))
        {
            *(pva+1)=ptab;
        }
        else
        {
            if(strlen(ptab)<strlen(*(pva)))
            {
                *(pva)=ptab;
            }
        }
        ptab=ptab+50;
    }
}
#包括
#包括
#包括
整数编码(字符[][50]);
无效附加(字符[][50],整数);
void minmax(字符*,字符**,整数);
int main()
{   
字符标签[50][50];
char*va[2];
int n;
n=编码(制表符);
附页(页签,n);
最小值(&tab[0][50],va,n-1);
printf(“\n测试\n”);
看跌期权(*va);
fflush(stdin);
看跌期权(*(va+1));
返回0;
}
//编码并阅读带有编码和附件的表格。
空隙最小值(字符*ptab,字符**pva,整数n)
{
int i;
*pva=ptab;
*(pva+1)=ptab;
ptab=ptab+50;
对于(i=1;istrlen(*(pva+1)))
{
*(pva+1)=ptab;
}
其他的
{

if(strlen(ptab)tab[0][50]表示在tab[0]中有索引50的元素,而不是tab[0]本身。除此之外,索引50超出了范围。如果您想打印字符串,请使用
printf(“%s”,…);


请注意,
fflush(stdin)
是未定义的行为。它仍然向我发出警告:第19行:警告:从不兼容的指针类型[默认启用]传递'minmax'的参数1第6行:注意:应为'char*',但参数类型为'char()[50]'
void minmax (char[][50] ,char **,int);

int main()
{
    char tab[50][50];
    char *va[2];
    int n = encodage( tab );
    affichage( tab, n );
    minmax( tab, va, n ); // <-
    printf( "short %s\n", va[0] );
    printf( "long  %s\n", va[1] );
    return 0;
}
void minmax(char ptab[][50], char **pva, int n )
              //     ^^^^^^
{
    int i, len0, len1, len;
    pva[0]=ptab[0];              // init shortest string with pointer to first string in table
    pva[1]=ptab[0];              // init longest string with pointer to first string in
    len0 = strlen( pva[0] );     // remember lenght of shortest string
    len1 = len0;                 // remember lenght of longest string
    for(i=1;i<n;i++)             // iterate from secend string up to last string (1..49 in your case)
    {
        len = strlen( ptab[i] ); // get length of string with index i
        if( len > len1 )         // if lenght is greater than lenght of longest string, then this is longest string
        {
            len1 = len;          // remember new maximum lenght
            pva[1]=ptab[i];      // remember new maximum string
        }
        else if( len < len0 )    // if lenght is less than lenght of shortest string, then this is shortest string
        {
            len0 = len;          // remember new minimum length
            pva[0]=ptab[i];      // remember new minimum string
        }
    }
}