gpt4 book ai didi

c - 使用 atoi() 并打印字符串失败 - C

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

我想编写一个程序,它将读取几个字符串,使用 atoi() 将其中一个字符串转换为整数,然后打印另一个字符串。

这是我的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 3

int main() {
char Name[N][20], Sname[N][20], afm[N][5];
int i = 0;
char slash;
int date, month, year;
int afmi;

while (1) {

printf("Give a 5-digit number: ");
gets(afm[i]);

afmi = atoi(afm); //Converting the afm string to an integer

if (afmi == 0) { /*Getting out of the while loop as soon as the afm string gets 0 as an input. */
break;
}

printf("Give your name: ");
gets(Name[i]);

printf("Give your Surname: ");
gets(Sname[i]);

printf("Birth date: "); //dd/mm//yy format
scanf("%d%c%d%c%d", &date, &slash, &month, &slash, &year);
getchar();


i++;
}

for (i = 0; i <= N+1; i++) { /*Here i want to print all the names i have input, one under another*/
printf("name: %s \n", Name);
}

system("pause");
return 0;
}

所以我的问题是,如果我第二次执行该过程时输入 0 作为输入,它不会退出 while 循环。而且,它最终没有正确打印名称...我该怎么办? (考虑到我是业余爱好者:D)感谢您的帮助!

最佳答案

字符串空间不足。 @barak manos

当以下代码尝试将 5 个 char 读入 afm[i] 时,它会调用未定义的行为作为 5 个 char 的键盘输入像“abcde”和Enter,尝试存储'a''b''c''d''e''\0' 转换为 afm[i]

// Bad code
#define N 3
char afm[N][5];
printf("Give a 5-digit number: ");
gets(afm[i]);

上面是使用 gets() 的问题示例,在 C11 中它不再是标准的。

而是使用fgets()

  printf("Give a 5-digit number: ");
char buf[80];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_EOF();
afmi = atoi(buf); // or strtol() for better error handling.

关于c - 使用 atoi() 并打印字符串失败 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33984960/

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