这是我的打印字符串的代码

char accname[MAX][MAXSTRING], transname[MAX][MAXSTRING];

printf ("Enter title for new account: ");
accname[i][i] = validatestring();
printf ("\n");

printf ("Enter title for transaction: ");
transname[i][i] = validatestring();
printf ("\n");

printf ("%s  %s", accname[i], transname[i]);


我的validateString()代码

char validatestring() {
    int keeptrying = 1, rc;
    char i[31];
    do
    {
        rc = scanf("%30[^\n]", &i);
        if (rc == 0)
        {
            printf (" **Invalid input try again: ");
            clear();
        }
        else if (getchar() != '\n')
        {
            printf (" **Title is longer than 30 characters: ");
            clear();
        }
        else
        {
            keeptrying = 0;
        }
    } while (keeptrying == 1);
    return i;
}


在accname [i] / transname [i]的printf阶段,我没有得到输入的值,我得到了奇怪的转换字符串类型,有时我得到了输入的第一个字符,但是现在我得到了完全不同的东西。谁能找出原因?

最佳答案

您的validatestring函数可能已损坏。

首先,您声明validatestring为返回char。但是,您也尝试从中返回char *(请参见return i,其中ichar [31])。这甚至不应该编译。

其次,如果要从validatestring返回字符串,则必须确保没有从中返回指向本地缓冲区的指针。 i是本地数组。不能从i返回指向validatestring的指针。

关于c - 为什么我的琴弦没有打印出正确的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13673129/

10-11 18:55