查找数组和字随机播放的大小

时间:2015-12-09 11:48:27

标签: c string size

我试图在我的程序中使用size_t找到一个字符串的长度,然后使用该整数来确定我的程序循环执行字母shuffle的次数(+6到一个字母,所以当保存时a = g)。

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

int main(void)
{
    FILE *file;
    int i, fnlen, lnlen;
    char firstname[15], lastname[15],  *ptr;

    fflush(stdin);
    printf("Please enter the first name of the player:");
    if(fgets(firstname, sizeof(firstname), stdin) != NULL)
    {
        size_t fnlen = strlen(firstname);
    } 
    printf("Please enter the last name of the player:");
    if(fgets(lastname, sizeof(lastname), stdin) != NULL)
    {
        size_t lnlen = strlen(lastname);
    }

    for(i = 0; i < lnlen; i++)
    {
        lastname[i] = (char)((lastname[i] - 'a' + 4) % 26 + 'a');    
    }
    for(i = 0; i < fnlen; i++)
    {
        firstname[i] = (char)((firstname[i] - 'a' + 4) % 26 + 'a');        
    }

    file = fopen("text.txt", "wt");
    if(!file)
    {
        printf("File is not able to open.");
        exit(1);
    }
    fprintf(file, "Firstname is : %s\n""Lastname is: %s\n", firstname, lastname)

当我打开保存到的文件时,第一个名称被正确洗牌,但是当我输入5时有8个字符,并且正确保存了姓氏,但字母没有洗牌,它们只输出我输入的内容fgets

1 个答案:

答案 0 :(得分:1)

我看到代码的主要问题是你在if语句中声明了size_t长度变量。这样,您对它们所做的任何更改都不会反映在if语句之外。我很惊讶你的代码编译给了这个(除非你还宣称另一个size_t len和fnlen高于你向我们展示的内容,在这种情况下通过在if语句中重新声明它你正在影响它。)我会像这样重写代码。我想你可能已将它们在上面声明并初始化为零。在这种情况下,您在if语句中声明了一个完全不同的变量(具有相同的名称),它没有生效,并且循环中使用的长度变量仍然没有值。

printf("Please enter the first name of the player:");
size_t fnlen = 0; //I declare them once outside of the if
size_t len = 0;
if(fgets(firstname, sizeof(firstname), stdin) != NULL)   
{
    fnlen = strlen(firstname); //do not redeclare them inside just assign
} 
printf("Please enter the last name of the player:");
if(fgets(lastname, sizeof(lastname), stdin) != NULL)
{
    len = strlen(lastname);
}
ptr = lastname;
while( *ptr != '\n') ++ptr;    
*ptr = '\0';
for(i = 0; i < len; i++)
{
    lastname[i] = (char)((lastname[i] - 'a' + 6) % 26 + 'a');    
}
for(i = 0; i < fnlen; i++)
{
    firstname[i] = (char)((firstname[i] - 'a' + 6) % 26 + 'a');        
}