C语言 我的字符串变量在一个代码块后丢失了内存

gstyhher  于 2023-05-28  发布在  其他
关注(0)|答案(2)|浏览(99)

我试图为用户名和电话号码做一个简单的记忆,这样用户就可以在代码的最后引用它,但是存储在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;
}

我已经做了一段时间了但毫无结果将感谢帮助和提示

km0tfn4u

km0tfn4u1#

char check[3];
 scanf("%s", check);
 if(strcmp(check, "yes") == 0)

check不足以存储yes。回想一下,C中的字符串只是一个以nul-byte结尾的字符数组。我们需要一个更大的数组和更严格的错误检查:

char check[4];
if (scanf("%3s", check) != 1) {
    fputs("Invalid input.\n", stderr);
    complain();
}
xurqigkl

xurqigkl2#

你的代码有几个问题。
例如,在这样的scanf调用中

scanf("%s", name1);

用户可以输入比数组name1可以存储的更多的字符。
你至少应该写

scanf("%29s", name1);

另一个问题是数组name1不够大,不能同时存储空格和数组name2中存储的字符串,这些字符串在这些语句中被附加到数组中。

strcat(name1," ");
strcat(name1, name2);

如果要保持数组name2的大小不变,则数组name1应至少声明为

char name1[60], name2[30], phonenumber[30], final;
     ^^^^^^^^^

而且你应该写例如

scanf("%29s", name1);
printf("Please enter your last Name: ");
scanf("%29s", name2);
strcat(name1," ");
strcat(name1, name2);

注意,变量final没有被使用。在这种情况下,编译器通常会发出警告。
数组check的大小不足以存储字符串"yes"

char check[3];
 scanf("%s", check);
 if(strcmp(check, "yes") == 0)

你需要像这样声明

char check[4];

然后写

scanf("%3s", check);
 if(strcmp(check, "yes") == 0)

还有这个提示

printf("\n1.Yes\n2.No\n");

混淆用户。他们可以认为他们必须再次输入一个字符串,而实际上程序期望用户输入一个整数。

while(1){
scanf("%d", &finalconfirmation);
if(finalconfirmation == 2)

而且你应该格式化程序的文本。否则它是不可读的。

相关问题