簡體   English   中英

字符串僅錄制第一個單詞

[英]String Only recording first word

我剛剛開始使用C語言進行編程,我正在編寫一個cypher / decypher程序。 要求用戶輸入存儲為char *的短語。 問題是程序只存儲字符串的第一個單詞,然后忽略它后面的所有內容。 這是獲取字符串然后分析它的代碼部分

int maincalc(int k)                         //The Calculation Function for Cyphering
{
    char *s;
    s=(char*) malloc(sizeof(100));
    printf("Please enter the phrase that you would like to code: ");  
    fscanf(stdin,"%s %99[^\n]", s);
    int i=0;
    int n=strlen(s);

    while(i<n)
    {
        if(s[i]>=65&&s[i]<=90)              //For Uppercase letters
        {
            int u=s[i];
            int c=uppercalc(u,k);
            printf("%c",c);
        }
        else if(s[i]>=97&&s[i]<=122)    //For Lowercase letters
        {
            int u=s[i];
            int c=lowercalc(u,k);
            printf("%c",c);
        }
        else 
            printf("%c",s[i]);          //For non letters
        i++;
    }
    free(s);
    printf("\n");
    return 0;
} 

只需知道該怎么做才能使程序確認整個字符串的存在,而不僅僅是第一個字。 謝謝

不,沒有人工作。 使用fscanf不會等待用戶輸入。 它只是打印“請輸入短語...”然后退出fgets也做同樣的事情,程序不等待輸入,只打印“PLease enter ...”然后退出。

在該評論中,在編輯之前,您提到了一些先前的輸入。 我的通靈調試功能告訴我,輸入緩沖區中仍然存在來自先前輸入的換行符。 這會

fgets(s, 100, stdin);

fscanf(stdin, "%99[^\n]", s);

立即返回,因為他們立即遇到表示輸入結束的換行符。

在獲得更多字符串輸入之前,您需要從緩沖區使用換行符。 你可以用

fscanf(stdin, " %99[^\n]", s);

格式開頭的空格占用輸入緩沖區中的任何初始空格,或清除輸入緩沖區

int ch;
while((ch = getchar()) != EOF && ch != '\n);
if (ch == EOF) {
    // input stream broken?
    exit(EXIT_FAILURE);
}

在使用fgetsfscanf獲取輸入之前。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM