Ich verstehe nicht, warum es nicht funktioniert. Es beschwert sich, wenn es 3 oder mehr Argumente gibt, aber nicht, wenn es nur den einen Vigenere arg gibt. Ich habe mir andere Leute angeschaut, die das gleiche Problem hatten und sie sagten, das habe funktioniert, um zu lösen ..... nicht sicher, was ich hier vermisse. Wenn ich ./vigenere
ausführen, erhalte ich einen Segmentierungsfehler. Es funktioniert normalerweise mit 2 Arg wie ./vigenere bard
und beschwert sich, wenn zusätzliche Argumente wie ./vigenere bard dfads
gegeben werden.Vigenere cs50 nicht meckert, wenn fehlt zweiten arg
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(int argc,string argv[])
{
string sKeyWord = argv[1];
int iKeyLength = strlen(sKeyWord);
int iKey[iKeyLength];
string sPlainText = "";
int counter = 0;
int iAccept = 0;
do
{
if(argc != 2) // <-----this should work whats wrong?
{
printf("Invalid argument! Please enter program name and keyword.\n");
return 1;
}
else if(argv[1])
{
for(int i = 0; i < iKeyLength; i++)
{
if (!isalpha(argv[1][i]))
{
printf("Invalid entry, please use letters only.\n");
return 1;
}
else
{
iAccept = 1;
}
}
}
}while(iAccept == 0);
for(int i = 0; i < iKeyLength; i++)
{
iKey[i] = toupper(sKeyWord[i]) - 65;
}
sPlainText = GetString();
int iPlainText = strlen(sPlainText);
for(int j = 0; j < iPlainText; j++)
{
if(!isalpha(sPlainText[j]))
{
printf("%c",sPlainText[j]);
counter++;
}
if(islower(sPlainText[j]))
{
printf("%c",((((sPlainText[j] - 97) + iKey[(j - counter)%iKeyLength])%26)+ 97));
}
if(isupper(sPlainText[j]))
{
printf("%c",((((sPlainText[j] - 65) + iKey[(j - counter)%iKeyLength])%26)+ 65));
}
}
printf("\n");
return 0;
}
sollten Sie früher untersuchen. ZB vor 'string sKeyWord = argv [1];' – BLUEPIXY
DOH! danke bluepixy * High Five * mein Retter! geändert in Zeichenfolge skeyWord = ""; und dann am Ende der do while-Schleife argv [1] zugewiesen. – Firecore
Warum überprüfen Sie die Argumente in einer Do-While-Schleife? (Hinweis: Ich denke, Sie brauchen diesen Code nicht in einer Schleife.) –