我试图为用户名和电话号码做一个简单的记忆,这样用户就可以在代码的最后引用它,但是存储在name1中的字符串在再次打印出来时似乎丢失了:
// Online C compiler to run C program online
#include <stdio.h>
#include <string.h>
//Intialisation
int main() {
// Write C code here
char name1[30], name2[30], phonenumber[30], final
int userdetailchecker = 2;
int finalconfirmation = 0;
printf("\n\n******GMI KOPERASI ORDER AND SELF-PICK-UP SERVICE******\n");
printf("|You have to register your details to access this service|\n");
while(userdetailchecker != 1){
printf("Please enter your first name: ");
scanf("%s", name1);
printf("Please enter your last Name: ");
scanf("%s", name2);
strcat(name1," ");
strcat(name1, name2);
printf("Is your name %s?\n1.Yes\n2.No\n", name1);
scanf("%d", &userdetailchecker);
}
printf("Great! Your orders would be associated with the username %s", name1);
printf("\nPlease enter your phone number: ");
scanf("%s", phonenumber);
while(strlen(phonenumber) < 9 || strlen(phonenumber) > 13){
printf("Invalid phone number(Must be 9 to 13 digits only)");
printf("\nPlease enter your phone number: ");
scanf("%s", phonenumber);
}
printf("You have successfully registered your phone number! (%s)", phonenumber);
printf("\n\nHello user %s!\n", name1);
printf("Continue to end section? y/n?\n");
char check[3];
scanf("%s", check);
if(strcmp(check, "yes") == 0)
{
printf("\nPlease confirm your user details");
printf("\nUsername = %s", name1);
printf("\nPhone number = %s", phonenumber);
printf("\n1.Yes\n2.No\n");
while(1){
scanf("%d", &finalconfirmation);
if(finalconfirmation == 2)
{
printf("Please log out of this session.");
break;
}
}
}
else{
return 0;
}
return 0;
}
我已经做了一段时间了但毫无结果将感谢帮助和提示
2条答案
按热度按时间km0tfn4u1#
check
不足以存储yes
。回想一下,C中的字符串只是一个以nul-byte结尾的字符数组。我们需要一个更大的数组和更严格的错误检查:xurqigkl2#
你的代码有几个问题。
例如,在这样的
scanf
调用中用户可以输入比数组
name1
可以存储的更多的字符。你至少应该写
另一个问题是数组
name1
不够大,不能同时存储空格和数组name2中存储的字符串,这些字符串在这些语句中被附加到数组中。如果要保持数组
name2
的大小不变,则数组name1
应至少声明为而且你应该写例如
注意,变量final没有被使用。在这种情况下,编译器通常会发出警告。
数组
check
的大小不足以存储字符串"yes"
你需要像这样声明
然后写
还有这个提示
混淆用户。他们可以认为他们必须再次输入一个字符串,而实际上程序期望用户输入一个整数。
而且你应该格式化程序的文本。否则它是不可读的。