我想编写一个程序,它将读取几个字符串,使用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) 谢谢你的帮助!
答案 0 :(得分:0)
字符串空间不足。 @barak manos
当以下代码尝试将char
读入afm[i]
时,它会调用未定义的行为作为5 char
的键盘输入,例如&#34; abcde&#34;和输入,尝试将'a'
,'b'
,'c'
,'d'
,'e'
,'\0'
存储到{ {1}}。
afm[i]
以上是使用// Bad code
#define N 3
char afm[N][5];
printf("Give a 5-digit number: ");
gets(afm[i]);
问题的一个例子,它在C11中不再是标准。
而是使用gets()
。
fgets()