繁体   English   中英

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

[英]How to read a string from user input in C, put in array and print

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

我必须从用户(字符数组)输入中读取2个字符串,最大长度为100个字符,并将其转换为大写字母,并在每个单词之后用换行符\\ 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]);

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

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

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

我认为您也可以使用scanf_s (安全scanf )并一次收集用户输入的两个字符串。 您还可以在程序顶部, main外部和#include preprocesor指令下方,将数组大小定义为符号常量,以提高灵活性。

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

我认为,如果您不想执行#define SIZE 101 ,也可以执行以下操作:

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

我是C的新手,请随时改进此答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM