[英]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.