2017-09-30 41 views
0

我無法找到如何設置輸入輸入的循環,然後 按'e'或'E'停止輸入。輸入的輸入是整數,但需要用字符停止。那就是我迷失的地方。我已經看到了一些關於使用ascii轉換的信息,但我不知道這將是多麼有效。這段代碼被破壞了,但是儘可能地得到了。任何信息都有幫助。在char變量中測試字符和整數

int main(void) 
{ 
    char num; 
    int sub; 

    while (sub != 'e' || sub != 'E') { 
     scanf("%d", &num); 
     sub = # 
     printf("%d", num); 
    } 

    return 0; 
} 
+0

我知道int是最好的操作數字,但它不能接受字符或至少不是我所知道的 – Tavaged

+2

1)在使用它之前需要初始化'sub'。2)'||' - >'&&'3)'scanf(「%d」,&num); sub = #' - >'scanf(「%c」,&num); sub = num;' – BLUEPIXY

+1

Try this [this] (https://ideone.com/fViI8W) – BLUEPIXY

回答

0

簡單。

#include <stdio.h> 
#include <ctype.h> 

int main(void) { 
    char c = getchar(); 
    int num; 

    while (c != 'e' || c != 'E') { 
     if (isdigit(c)) 
       num = c - '0'; 
     c = getchar(); 
    } 
    return 0; 
} 

但是,您不必使用ascii字符作爲停止輸入的方式。您可以使用-1的EOF。它在UNIX系統上是Ctrl-D,在Windows上是Ctrl-Z。 int c; 而((C =的getchar())!= EOF)

+4

對於這個'while((c = getchar())!= EOF)'工作'c' * needs *是一個'int'。 – alk

+0

感謝您的意見 – Blaze349

0

一個直接方式的int'e'和,'E'輸入之間進行區分是讀取用戶輸入的fgets(),然後解析它。

#define LINE_SZ 80 
char buf[LINE_SZ]; 

while (fgets(buf, sizeof buf, stdin) && buf[0] != 'e' && buf[0] != 'E') { 
    if (sscanf(buf, "%d", &num) != 1) { 
    Handle_other_non_int_input(); 
    } 
    sub = &num; 
    printf("%d", num); 
} 
0

正如在評論中指出的,(sub != 'e' || sub != 'E')總是如此。如果sub不能同時爲eE

請注意sub是一個int而不是一個整數指針(int *)。 行sub = &num;分配subnum的地址。

在初始化之前,while循環的控制表達式中使用的值爲subsub在那個不確定的點上有垃圾值。在使用它之前,您必須先用一些有價值的方法對其進行初始化。

int num, rv; 
while(1) 
{ 
    rv=scanf("%d", &num); 
    if(rv==0) 
    { 
     if((num=getchar())=='e' || num=='E') 
     { 
      break; 
     } 
     else 
     { 
      while(getchar()!='\n'); 
      continue; 
     } 
    } 
    printf("\n%d", num); 
} 

值由scanf()其返回值存儲在rv讀入num

scanf()返回成功分配在這種情況下應該是1如果因爲%d的整數值被讀入num是格式說明的數目。

如果rv1,它是一個數字並被打印。否則,它可能是一個不會被scanf()讀取的字符,並且在輸入緩衝區中不會被使用。該數據的第一個字節由getchar()讀取,如果這是eE,則退出循環,否則輸入緩衝區會被清除,直到遇到一個\n,並且循環的下一次迭代不會進入打印發生。

相關問題