如何写' \ n'来自键盘与C中的scanf()

时间:2018-02-23 16:41:02

标签: c scanf

我是 C的新手,我想知道是否可以从键盘<字符串\n写入字符串< / strong>使用scanf()函数。

我使用的代码是:(对不起意大利变量词)

void riempi_array_stringhe (char* stringhe[], int lunghezza_array)
{
    for (int i = 0; i < lunghezza_array; i++) {
        stringhe[i] = (char*) malloc(sizeof(char) * 100);
        printf("Insert a new string: ");
        scanf("%s", stringhe[i]);
    }
}

我尝试输入shift + enter,alt + enter,或插入\ n作为输入,但根本不起作用。

提前致谢!

1 个答案:

答案 0 :(得分:3)

有一个[说明符。引自scanf(2)

  

[ - 匹配指定的一组接受字符中的非空字符序列;下一个指针必须是指向char的指针,并且字符串中的所有字符必须有足够的空间,加上一个终止的空字节。

示例:

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

int main()
{
    char *str[10];

    for (int i = 0; i < 10; i++) {
        str[i] = (char *)malloc(sizeof(char) * 100);
        printf("Insert a new string: ");
        scanf("%[^~]", str[i]);
        printf("Your input: %s\n", str[i]);
    }
    return 0;
}

要结束输入,我们应输入~然后Enter或按Ctrl+D(EOF)。我们可以指定其他字符来终止输入。例如,scanf("%[^X]", str[i]);将在用户插入X然后Enter后终止输入。

请注意,为防止缓冲区溢出,应始终指定序列的width等于缓冲区大小减1(对于NUL字符),即:

scanf("%99[^~]", str[i]); // read no more than 99 symbols + NUL