C 函数从用户输入中读取句子

C 函数从用户输入中读取句子,c,C,我试着从用户输入的问题中读出这个句子,我的函数是,当我试图调用它时,它跳过了第二次尝试。有解决办法吗 void readString(char *array, char * prompt, int size) { printf("%s", prompt); char c; int count=0; char * send = array; while ((c = getchar()) != '\n') { send[count] = c; coun

我试着从用户输入的问题中读出这个句子,我的函数是,当我试图调用它时,它跳过了第二次尝试。有解决办法吗

void readString(char *array, char * prompt, int size) {
    printf("%s", prompt);
    char c; int count=0;
    char * send = array;
    while ((c = getchar()) != '\n') {
        send[count] = c; count++;
        if (size < count){ free(array); break; } //lets u reserve the last index for '\0'
        }

    }
以下是输入示例: “这是一句话”

因此,我想这样做:

printf(" %s | %s \n",obligation, dodatno);
并获得:

这是一句话,这是另一句话

readString()函数中

  • malloc()
    或family不会动态分配
    array
    内存

    使用未分配内存的指针调用
    free()
    ,会动态创建未定义的行为

  • getchar()
    返回一个
    int
    。您应该将
    c
    的类型更改为
    int c

  • 另外,
    readString()
    中的输入没有空终止符,因此不能直接将数组用作字符串。您需要自己使用null终止数组,作为读取缓冲区,稍后用作字符串

  • 好了:)


    请说明您的输入和预期输出。SOER可以更好地帮助您。您是对的,我更新了问题。使用
    scanf
    “%[^\n]”
    会更容易,正如我在回答中提到的那样。或者简单地使用
    fgets
    。但如果我想检查句子中的所有字符呢?这也是错误的
    c
    应该是@SouravGhosh提到的
    int
    ,如果执行
    break
    语句,
    array[count]='\0'
    数组[1500]='\0'相同写入无效内存位置,调用未定义的行为。仍然存在跳过第一个变量的问题:)@VladimirDjukic“跳过第一个变量”是什么意思?@VladimirDjukic您的问题在其他地方(可能是因为在调用函数之前有一个
    scanf
    )。您可以通过添加
    intc;而((c=getchar())!='\n'&&c!=EOF)调用前
    读取字符串(义务,“输入义务”,150)。顺便说一句,不应该
    150
    1500
    ?@VladimirDjukic delete
    ,而((c=getchar())!='\n'&&c!=EOF)
    scanf(“%d”、&days)更改为
    scanf(“%d%*c”、&days)很好的答案。添加
    if(size
    需要
    if(size-1
    printf(" %s | %s \n",obligation, dodatno);
    
    void readString(char *array, char * prompt, int size) {
        printf("%s", prompt);
        int c; int count=0;
        while((c = getchar()) != '\n' && c != EOF);
        while ((c = getchar()) != '\n') {
            array[count] = c; count++;
            if (count == (size - 1)) { break; }
        }
        array[count] = '\0';
    }