如何从C中的用户输入中读取字符串,放入数组并打印
我是C语言的新手,我读过C语言书中的几章,现在我必须做一个作业,但我很困惑,希望有人能帮我 我必须从用户(字符数组)输入中读取最大长度为100个字符的2个字符串,并将其转换为大写字母,然后在每个单词后用换行符\n打印出来 到目前为止,我有以下几点:如何从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
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
(securescanf
)一次收集用户输入的两个字符串。您还可以将数组大小定义为符号常量,以实现灵活性,它位于程序顶部、主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()难道不可能吗?不确定我是否应该使用它。你自己的问题最好作为一个单独的问题问。你自己的问题最好作为一个单独的问题问。