如何从C中的用户输入中读取字符串,放入数组并打印

如何从C中的用户输入中读取字符串,放入数组并打印,c,arrays,input,user-input,C,Arrays,Input,User Input,我是C语言的新手,我读过C语言书中的几章,现在我必须做一个作业,但我很困惑,希望有人能帮我 我必须从用户(字符数组)输入中读取最大长度为100个字符的2个字符串,并将其转换为大写字母,然后在每个单词后用换行符\n打印出来 到目前为止,我有以下几点: int main() { char chars[100]; int i = 0; char str1; char str2; int j = 0; scanf("\n %c", str1); scanf("\n %c", str2); whil

我是C语言的新手,我读过C语言书中的几章,现在我必须做一个作业,但我很困惑,希望有人能帮我

我必须从用户(字符数组)输入中读取最大长度为100个字符的2个字符串,并将其转换为大写字母,然后在每个单词后用换行符\n打印出来

到目前为止,我有以下几点:

int main() {
char chars[100];
int i = 0;
char str1;
char str2;
int j = 0;

scanf("\n %c", str1);
scanf("\n %c", str2);


while (str1[i] != '\0') {

    chars[i] = str1[i];
    toupper(chars[i]);
    printf(chars[i]);
    i++;

}

while (str2[j] != '\0') {

    chars[j] = str2[j];
    toupper(chars[j]);
    printf(chars[j]);
    j++;

}


return 0;
}

从用户处获取2个输入后,它会显示停止运行并显示运行失败。

将str1和str2更改为数组。在前两个scanf中使用%100[^\n]。读取带空格的字符串是一种正则表达式技巧。请阅读

char str1[101];
char str2[101];
scanf("%100[^\n]",str1);
scanf("%100[^\n]",str2);

这将接收两个字符串。输入第一个字符串后按enter键可输入第二个字符串。

将str1和str2更改为array。在前两个scanf中使用%100[^\n]。读取带空格的字符串是一种正则表达式技巧。请阅读

char str1[101];
char str2[101];
scanf("%100[^\n]",str1);
scanf("%100[^\n]",str2);

这将包含两个字符串。输入第一个字符串后按enter键可输入第二个字符串。

这是您的直接问题:

scanf("\n %c", str1);
此格式字符串告诉
scanf
读取一定量的空格,后跟一个字符,该字符将存储在
str1

@H2CO3是正确的:
scanf
几乎从来都不是读取用户输入的正确答案。它执行无边界检查,并且对用户输入的格式过于挑剔;一个意外的字符将完全混淆它。强烈建议您尽可能使用
fgets

fgets(str1, 100, stdin);
如果你不能这样做,你应该问你的教授为什么不能。真的

如果您必须使用
scanf
读取此处的输入,您可以按照@user2479209在其答案中描述的方式进行

您的程序还有一个问题,
toupper(chars[i])
不会更改存储在
chars[i]
中的值。必须将
toupper
的结果显式分配回数组,例如:

chars[i] = toupper(chars[i]);

这是你眼前的问题:

scanf("\n %c", str1);
此格式字符串告诉
scanf
读取一定量的空格,后跟一个字符,该字符将存储在
str1

@H2CO3是正确的:
scanf
几乎从来都不是读取用户输入的正确答案。它执行无边界检查,并且对用户输入的格式过于挑剔;一个意外的字符将完全混淆它。强烈建议您尽可能使用
fgets

fgets(str1, 100, stdin);
如果你不能这样做,你应该问你的教授为什么不能。真的

如果您必须使用
scanf
读取此处的输入,您可以按照@user2479209在其答案中描述的方式进行

您的程序还有一个问题,
toupper(chars[i])
不会更改存储在
chars[i]
中的值。必须将
toupper
的结果显式分配回数组,例如:

chars[i] = toupper(chars[i]);

我认为您还可以使用
scanf_s
(secure
scanf
)一次收集用户输入的两个字符串。您还可以将数组大小定义为符号常量,以实现灵活性,它位于程序顶部、主
main
之外和
#include
preprocessor指令之下

// Symbolic constants
#define SIZE 101

char str1[SIZE];
char str2[SIZE];
scanf_s("%100s%100s", str1, SIZE, str2, SIZE);
或者:

scanf_s("%100s", str1, SIZE);
scanf_s("%100s", str2, SIZE);
我认为,如果你不想做
#定义尺寸101
,你也可以做:

scanf_s("%100s", str1, 101);
scanf_s("%100s", str2, 101);

我是C新手,所以请随意改进这个答案。

我认为您也可以使用
scanf\u s
(安全
scanf
)一次收集用户输入的两个字符串。您还可以将数组大小定义为符号常量,以实现灵活性,它位于程序顶部、主
main
之外和
#include
preprocessor指令之下

// Symbolic constants
#define SIZE 101

char str1[SIZE];
char str2[SIZE];
scanf_s("%100s%100s", str1, SIZE, str2, SIZE);
或者:

scanf_s("%100s", str1, SIZE);
scanf_s("%100s", str2, SIZE);
我认为,如果你不想做
#定义尺寸101
,你也可以做:

scanf_s("%100s", str1, 101);
scanf_s("%100s", str2, 101);

我是C新手,所以请随意改进这个答案。

str1
str2
应该是数组。我来试试。。。没有任何区别,因为它在输入后仍然停止你的编译器没有给出任何警告,对吗?哦,等等,noez…@user1842140提示:您想使用
fgets()
。谷歌搜索它的文档。远离
scanf()
。没有fgets()难道不可能吗?不确定我是否应该使用它。
str1
str2
应该是数组。我试试。。。没有任何区别,因为它在输入后仍然停止你的编译器没有给出任何警告,对吗?哦,等等,noez…@user1842140提示:您想使用
fgets()
。谷歌搜索它的文档。远离
scanf()
。没有fgets()难道不可能吗?不确定我是否应该使用它。你自己的问题最好作为一个单独的问题问。你自己的问题最好作为一个单独的问题问。