scanf()中元素的数量变化

scanf()中元素的数量变化,c,scanf,C,Scanf,我如何告诉我的程序如何改变scanf要读取的元素数量?我希望它读取字符串中的每个字符,字符串的长度可能从一个字符到一百个字符不等。我知道我可以做scanf(“%c%c%c%c…”)一百次 char A[105]; scanf("%s", A); printf("%s\n", A); 这样,您可以输入不同长度的字符串。如果您输入“abc”,则结果为“abc”您可以这样做 char A[105]; scanf("%s", A); printf("%s\n", A); 这样,您可以输入不同长度的字

我如何告诉我的程序如何改变scanf要读取的元素数量?我希望它读取字符串中的每个字符,字符串的长度可能从一个字符到一百个字符不等。我知道我可以做
scanf(“%c%c%c%c…”)一百次

char A[105];
scanf("%s", A);
printf("%s\n", A);
这样,您可以输入不同长度的字符串。如果您输入“abc”,则结果为“abc”

您可以这样做

char A[105];
scanf("%s", A);
printf("%s\n", A);
这样,您可以输入不同长度的字符串。如果输入“abc”,则结果为“abc”

当然,请使用具有适当大小缓冲区的
fgets()

char buf[LINE_MAX];
if (fgets(buf, sizeof buf, stdin) != NULL) {
    // input is now in `buf'
}
如果确实无法使用数组,则调用
getchar()
,直到找到换行符:

int sum = 0;

int ch;
while ((ch = getchar()) != EOF && ch != '\n') {
    sum += ch;
}
(这已经满足了您的要求,即它对用户输入的字符串的字符代码求和。)

当然,请使用具有适当大小缓冲区的
fgets()

char buf[LINE_MAX];
if (fgets(buf, sizeof buf, stdin) != NULL) {
    // input is now in `buf'
}
如果确实无法使用数组,则调用
getchar()
,直到找到换行符:

int sum = 0;

int ch;
while ((ch = getchar()) != EOF && ch != '\n') {
    sum += ch;
}

(这已经满足了您的要求,即它对用户输入的字符串的字符代码求和。)

该程序的目的是在不使用数组的情况下添加字符串字符的每个整数值并求和。该程序的目的是在不使用数组的情况下添加字符串字符的每个整数值并求和。请不要使用
scanf()
输入任意长度的字符串
fgets()
是一个更好的选择。在没有数组的情况下,有什么方法可以做到这一点吗?不幸的是,没有。我通常使用它作为输入string@david“不”是错误的。另外,帮你自己(和你的用户)一个忙,开始使用
fgets()
获取用户输入
scanf()
是不安全的,而且违反直觉的。@asdfqwer:你为什么要跳过障碍来避免使用数组?你迟早要用它们。最好现在就习惯它们……请不要使用
scanf()
输入任意长度的字符串
fgets()
是一个更好的选择。在没有数组的情况下,有什么方法可以做到这一点吗?不幸的是,没有。我通常使用它作为输入string@david“不”是错误的。另外,帮你自己(和你的用户)一个忙,开始使用
fgets()
获取用户输入
scanf()
是不安全的,而且违反直觉的。@asdfqwer:你为什么要跳过障碍来避免使用数组?你迟早要用它们。最好现在就习惯它们。。。