gpt4 book ai didi

c - FOR 循环中的字符串

转载 作者:行者123 更新时间:2023-11-30 20:21:46 25 4
gpt4 key购买 nike

我有一个问题。

我想要一个 FOR 循环来打印回文本许多字符串。假设我输入了我的名字和姓氏。 FOR 循环生成字符串。

#include <stdio.h>
int main(){

char str1 [12];
char str2 [12];
char wordarray [2]={str1,str2}; // error here
int i;

printf ("Type your forname : ");
scanf ("%s",&str1);
printf ("\nType your last name : ");
scanf ("%s",&str2);

printf ("\n\nYour name is : ");
printf ("%s\t%s",str1,str2);
printf ("\n");

for (i=0;i<3;i++){
printf ("%s",wordarray [i]); // Error here .
} // end FOR

return 0;
} // end MAIN

最佳答案

您需要使用 scanf(或用于用户输入的任何函数)验证每次读取,以确保您有有效的数据可供使用。您还应该为读取提供宽度限制,以确保读取不会超出数组末尾。 (例如 scanf ("%11s", str1))。您应该考虑使用 fgets 进行用户输入,并删除缓冲区中 fgets 包含的 '\n'。这将帮助您避免 scanf 中的许多陷阱,这些陷阱通常会困扰新用户,尤其是在进行混合字符串和数字输入时。

除此之外,您还应该避免在代码中使用魔数(Magic Number)(例如char str1[12])。如果您需要一个常量12,则定义一个或声明一个枚举来创建它。

将这些部分放在一起,您可以执行以下操作:

#include <stdio.h>

#define LEN 12

int main (void) {

char str1 [LEN] = "";
char str2 [LEN] = "";
char *wordarray[] = {str1, str2};
int i, nwords = sizeof wordarray/sizeof *wordarray;

printf ("Type your forname : ");
if (scanf ("%11s", str1) != 1) {
fprintf (stderr, "error: invalid input.\n");
return 1;
}
printf ("Type your last name : ");
if (scanf ("%11s", str2) != 1) {
fprintf (stderr, "error: invalid input.\n");
return 1;
}

printf ("\nYour name is : %s %s\n", str1, str2);

for (i = 0; i < nwords; i++){
printf ("%s", wordarray [i]);
}
putchar ('\n');

return 0;
}

示例使用/输出

$ ./bin/name
Type your forname : david
Type your last name : rankin

Your name is : david rankin
davidrankin

仔细检查并考虑其他答案,如果您还有其他问题,请告诉我。另请考虑我关于零输入或输入超过 12 个字符的评论。这将有助于增强输入处理的稳健性。

如果您想使用 fgets 来处理输入,您可以使用以下方法稍微改进您的输入处理:

#include <stdio.h>
#include <string.h>

#define LEN 12

int main (void) {

char str1 [LEN] = "",
str2 [LEN] = "",
*wordarray[] = {str1, str2};
size_t i, len = 0, nwords = sizeof wordarray/sizeof *wordarray;

printf ("Type your forname : ");
if (!fgets (str1, LEN, stdin)) { /* read with fgets/validate */
fprintf (stderr, "error: invalid input.\n");
return 1;
}
len = strlen (str1); /* get length of str1 */
if (str1[len-1] == '\n') /* test for trailing '\n' */
str1[--len] = 0; /* overwrite with nulbyte */

printf ("Type your last name : ");
if (!fgets (str2, LEN, stdin)) {
fprintf (stderr, "error: invalid input.\n");
return 1;
}
len = strlen (str2);
if (str2[len-1] == '\n')
str2[--len] = 0;

printf ("\nYour name is : %s %s\n", str1, str2);

for (i = 0; i < nwords; i++){
printf ("%s", wordarray [i]);
}
putchar ('\n');

return 0;
}

关于c - FOR 循环中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41421011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com