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

标签 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);


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 个输入后,它表示停止运行并表示运行失败。

最佳答案

这是您的直接问题:

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]);

关于c - 如何从C中的用户输入中读取字符串,放入数组并打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19254121/

相关文章:

python - 评估 python 中的 for 循环,包含带有嵌入 for 循环的数组

C++,从 char 数组中提取带符号的多位整数

c++ - 需要用户输入字符串/检查字符串长度(C++)

c++ - 如何有选择地从缓冲区中读取数据

c - 如何从 double 初始化 timespec

java - 将文件读入数组时出现 NullPointerException

css - 样式化 HTML5 数字输入

将华氏度转换为摄氏度并打印给用户

c - 如何实现链表删除?

html - 可选时间 <需要输入类型 ="datetime-local">