我对C还很陌生,我读过几章C的书,现在我不得不做一个作业,但我都很困惑,希望有人能帮我。
我必须从最大长度为100个字符的用户(字符数组)输入中读取2个字符串,并将它们转换为大写字母,然后在每个单词后面用换行符打印出来。
到现在为止我有这个:

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/

10-11 00:50
查看更多